آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

اجرا شدن Thread ها بر روی گوشی چند هسته ای

obeyd  12 سال پیش  12 سال پیش
+1 0

سلام.استاد در مورد اینکه هر Thread با کدام CPU اجرا بشه ما کنترلی داریم یا خود آندروید تعیین میکنه کدام Thread با کدام CPU کار کنه؟ بفرض اگر ما 4تا Thread داشته باشیم و یک گوشی 4 هسته ای اونوقت هر Thread را یک CPU اجرا میکنه؟ و دوم اینکه اولویت بندی Thread ها به چه صورت است؟ بطور مثال ما فعالیتی در اکتیویتی داریم که کاربر ما اثرات آن را در فایل XML خود در روی گوشی میبیند و ما میخواهیم این عمل زودتر از سایر کارها شروع، انجام و به اتمام برسد و پس از آن سایر فعالیتها یا Thread ها در Background انجام شود تا کاربر افت سرعتی در برنامه نبیند یا از روان بودن برنامه کاسته نشود. اگر بخواهیم برحسب درجه اهمیت آنها را اولویت بندی کنیم چه کاری باید انجام بدهیم؟

 برای این سوال 1 پاسخ وجود دارد.
پاسخ به سوال 
uncocoder  12 سال پیش
0 0

بحث تفکیک هر Thread روی CPU مجزا، توسط نرم افزار فرمان داده می شود و بصورت اتوماتیک هم توسط سخت افزار ( یا سیستم عامل ) ممکن است تعیین شود، اما تعیین شما اولویت دارد بر تعیین سیستم عامل. اما اینکه چگونه است، تا بحال تجربه ای در آن نداشته ام.

در خصوص اولویت بندی برای Thread ، خاصیتی به نام Priority وجود دارد که میزان اهمیت آن Thread را مشخص می کند. در اندروید نیز متدهای آن به سادگی از داخل نمونه ساخته شده از Thread قابل دسترسی است ولی بازهم من استفاده نکرده ام چون اصلاً نیازی نمی شود. چون Thread معمولاً برای کارهایی است که قرار هستند در پشت صحنه و به مدت طولانی اجرا شوند و در این شرایط ما نباید منتظر اتمام آنها باشیم. در بعضی شرایط هم ما اتمام آنرا می خواهیم بدانیم اما در آن حین کار دیگری برای انجام دادن نداریم ( مثل گرفتن اطلاعات از وب سرویس که در قسمتهای بعد آموزش داده شده ) که در این شرایط هم باز Priority اهمیتی برای ما ندارند. خیلی نگران این مسائل نباشید چون بیشتر به شلوغ شدن و خطرناک تر شده پروژه ( به قول خودم باگ خیز شدن پروژه ) منجر خواهند شد.

اما در خصوص کنترل روی Thread ها، متدهای زیادی مثل sleep, join, wait, notify ، انواع Lock و ... وجود دارند که من به ندرت از آن استفاده کرده ام و باز هم خیلی در توسعه نرم افزار کاربردی نیستند بلکه بیشتر بدرد رسانه های پر پردازش، مثل بازی و پردازش تصویر و ... می خورند و به نظر من آموزش برخی از آنها هم بی مورد بود، که در آموزشها ارائه نشد.

ما همه چیز را نباید به Thread ها محول کنیم و تنها در شرایط خاص مثل:

  • ارتباط با سرور ، نظیر وب سرویس، دانلود فایل و نظایر آن
  • پردازش تصویر
  • بارگزاری منابع از SDCARD
  • محاسبات بسیار بسیار پیچیده
  • شمارشگر ها و توابع وقفه ای ( مثل پروژه Counter )
  • و ...

استفاده خواهیم کرد.

در خصوص اطلاعات بیشتر برای Thread ها و مشابه سازی آن با ویندوز، به Task Manager ویندوز بروید و ببینید که هر پروسس می تواند Set Priority و Set Affinity داشته باشد، که اولی اولتی اجرای آن Process و در شرایط ما Thread است و دومی تعداد CPU هایی که توسط سیستم عامل به آن اتصال داده می شود ، حالا اگر برنامه خواست استفاده کند، می تواند از آن CPU بهره گیرد.


پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .