پديده چندنخي در سيستم عامل اندرويد

در اين شماره قصد داريم MultiThreading را در برنامهنويسي سيستم عامل آندرويد بررسي كنيم.
همانطور كه در شمارههاي گذشته گفته شد Thread يك اجراي هم روند است، Threadها يك پشته فراخواننده براي دسترسي به متدها و متغيرهاي محلي در اختيار دارد. هر برنامه داراي يك Main Thread است كه وظيفه آن اجراي برنامه و تعامل با كاربر است، هر برنامه ميتواند يك Thread را براي اهداف مشخصي اجرا كند. چند راه براي ايجاد يك Thread در Android وجود دارد:
۱ـ يك كلاس كه از كلاس Thread به ارث رسيده باشد و متد run آن را بازنويسي كنيد.
۲ـ ايجاد يك شيء نمونه از كلاس Runable .
نكته مشترك در راههاي بالا اين است كه بايد متد start فراخواني شود.
مزاياي استفاده از Threadها
۱ـ به اشتراكگذاري منابع پردازشي سيستم بين Threadها.
۲ـ اجراي كارهاي سنگين (مانند ارسال اطلاعات در شبكه، پردازش عكس و...) توسط Threadهاي ديگر باعث ميشود Threadاصلي كه UI و برقراري ارتباط با كاربر را انجام ميدهد، درگير كارهاي سنگين نشده و باعث هنگ كردن آن نميشود.
۳ـ استفاده از Threadها يك اجراي انتزاعي هم روند را براي اجراي برنامه فراهم ميكند.
۴ـ برنامههايي كه از چند Thread استفاده ميكنند(Multi Threads Program) در سيستمهايي كه چند پردازنده دارد سريعتر و راحتتر اجرا ميشوند.
معايب استفاده از Thread ها
۱ـ كدنويسي شما به عنوان برنامهنويس، پيچيده ميشود.
۲ـ نياز به تشخيص/ اجتناب/ حل مشكلات deadlocks (در مورد deadlock در شمارههاي پيش توضيح دادهايم) وجود دارد.
3ـ مديريت بيشتر روي خطاهاي مديريت نشده (Unhandled Exception).
اما نتيجهاي كه ميتوان گرفت اين است كه استفاده از يك سيستم به صورت Multi Thread به شرط اين كه درست پياده شده باشد، به صرفهتر از سيستمي است كه به صورت يك Thread اجرا ميشود.
مثلا برنامهاي نوشتهايد كه قرار است يك كار سنگين را انجام دهد. بايد UI برنامه شما با كاربر تعامل داشته باشد، يعني كاربر احساس نكند چون كار سنگيني انجام ميدهد برنامه ديگر قابل استفاده نيست. سيستم عامل آندرويد براي حل اين مشكل 2 روش در اختيار شما قرار ميدهد:
1ـ استفاده از يك Service در پشت زمينه و اعلام يك Notification بعد از اتمام كارش به كاربر.
2ـ ايجاد يك Background Thread براي اجراي وظايفي كه بايد جداي ازMain Thread صورت پذيرد و زماني كه انجام شد نتيجه به كاربر اعلام شود.
روش اول مورد بحث ما نيست، اما در روش ۲، بگذاريد بحث را بيشتر باز كنيم و با نحوه ايجاد و تعامل آن با رابط كاربري بيشتر آشنا شويم.
زماني كه برنامه شما اجرا ميشود يك Message Queue ايجاد ميكند تا به درخواستها پاسخ دهد. وقتي شما يك Thread جداي از Main Thread ايجاد ميكنيد، بايد يك Handler براي آن بسازيد تا به درخواستهايي كه از سوي Thread اي كه تعريف كرديد، ميآيد پاسخ دهد. براي اين كار شما به ايجاد يك نمونه از كلاس Handler نياز داريد تا زماني كه كار Threadتمام شد، نتايج به كاربر اعلام شود و با استفاده از اين كلاس اين مورد را انجام دهيد. شما از طريق اين Handler ميتوانيد با Main Thread ارتباط برقرار كنيد.
چند نكته حائز اهميت است: هيچ كدام از Background Threadها نميتواند با UI برنامه در ارتباط باشد، فقط Main Thread ميتواند با UI اصلي يك Activity ارتباط برقرار كند، متغيرهاي عمومي توسط يك Thread ديگر مورد استفاده قرار ميگيرد و بهروزرساني ميشود.
اما نكاتي در مورد پيغامهاي صفبندي شده در كلاس Handler وجود دارد. همان طور كه گفته شد براي اين كه يك Thread با Thread اصلي برنامه تعامل داشته باشد نياز دارد كه يك Message براي آن صادر كند. اين پيغام با استفاده از متد (obtainMessage) كلاس Handler ايجاد ميشود، سپس دادههاي مورد نظر كه نياز است بايد به كاربر نمايش داده شود و هر عمل ديگر توسط اين Message براي Thread اصلي برنامه ارسال ميشود.
متد sendMessage يك پيغام را ميتواند ارسال كند كه كلاس Handler با استفاده از متد handleMessage درخواستهاي صادر شده را پاسخ دهد.
به اين كد دقت كنيد:
Handler handler = new Handler(){
@Override
public void handleMessage(Message msg){
} };
Thread backgroundThread = new Thread(new Runable(){
@Override
public void run(){
Message msg = handler.obtainMessage();
handler.sendMessage(msg);
} });
backgroundThread.start();
در توضيح كد بالا بايد گفت كه ابتدا يك شيء از كلاس Hnadler ميسازيم سپس متد handleMessage آن را بازنويسي ميكنيم و پردازش درخواستهاي صادر شده را در آن انجام ميدهيم. مرحله بعد يك Thread ديگر ايجاد ميكنيم و در آن پس از انجام كارهاي مورد نظر يك Message براي شيء handler ارسال ميكنيم. وظيفه نمايش و پردازش درخواستهاي صادر شده به عهده handler است. در آخر با فراخواني متد start شيء backgroundThread، اين Thread را اجرا ميكنيم.
در شمارههاي بعدي بيشتر در مورد نحوه ايجاد Thread و استفاده از آن خواهيم پرداخت.
امير بهاء الدين سبط الشيخ

7. ماي دوم (MyDoom) نوع ديگري از انواع ويروسهاست كه يكي از وظايف مخرب آن ايجاد backdoor در سيستمعامل است. دومين عمل ويرانكننده اين ويروس انجام جستجو در جستجوگر و كپي تمام آدرسهاي موجود در مرورگر بود. مثلا جستجوگري مانند گوگل ميليونها تقاضا براي جستجو روي سايت خود دريافت ميكرد و اين كار سرعت جستجوگر را براي دريافت درخواستهاي جديد كاهش ميداد و نميتوانست به جستجوهاي كاربران حقيقي پاسخ دهد.
صرف نظر از محل الكترودها، ساز و كار اصلي همان است: الكترودها تفاوت جزئي ولتاژ بين نرونها را اندازهگيري ميكنند، سپس سيگنال تقويت و فيلتر ميشود. در سيستمهاي BCI فعلي، اين سيگنال توسط برنامه رايانه تفسير ميشود.
تا مدتها اينگونه تصور ميشد كه مغز افراد بالغ، ديگر دچار تغيير و تحول نميشود. در دهه 1990، دانشمندان نشان دادند كه مغز انسان حتي در سن پيري نيز قابل تغيير است. اين مفهوم، كه غشاي انعطافپذير(cortical plasticity) ناميده ميشود، به اين معناست كه مغز ميتواند به صورت شگفتآوري با شرايط محيطي جديد سازگار شود. چنانچه يك فرد بالغ دچار ضربه مغزي شود، قسمتهاي ديگر مغز ميتواند كارهاي مربوط به بخش آسيب ديده را انجام دهد. چرا اين موضوع براي BCI مهم است؟ اين به آن معناست كه شخص ميتواند ياد بگيرد BCI را كنترل كند، مغزش ارتباطات جديدي ايجاد ميكند و نرونهاي جديدي را به كار ميگيرد. در جايي كه از ايمپلنت استفاده ميشود، مغز ميتواند اين جسم خارجي را بپذيرد و ارتباط تازهاي ايجاد كند تا ايمپلنت به عنوان قسمتي از دستگاه عصبي مغز كار كند.
همچنین شما باید یک نرمافزار ضد جاسوسی نیز نصب کنید. این نرمافزارها الگوی انتقال دادههای شما را در اینترنت تحت نظر میگیرند. حتی بعضی از آنها فعالیت شما در سیستمعامل را نیز کنترل میکنند و با شناسایی یک فعالیت غیرعادی در دستگاه شما، جلوی آن را میگیرند. این برنامهها نیز مانند آنتیویروسها باید همیشه بهروز باشند تا مؤثر واقع شوند.

همزمان با رويداد تاريخي جالب 11.11.11 توزيع آرچبنگ كه در حقيقت از آرچلينوكس مشتق شده است، خودش را بهروز كرد. اين توزيع جديد از نظر ظاهري تغييرات زيادي داشته است.
در اين هفته همچنين فايرفاكس خودش را يك پله بالاتر برد. در حالي كه فايرفاكس در هر نگارش جديد، قابليتهاي جديدي را رو ميكند، كاربران بيشتر از همه قابليتهايي را ميبينند كه از نگارشهاي جديد حذف شده است. موزيلا در فايرفاكس8، افزونههايي كه توسط برنامهها و وبسايتهاي غير از موزيلا روي اين مرورگر نصب شده است را غيرفعال ميكند تا امنيت بيشتري براي فايرفاكس به ارمغان بياورد. 






