Featured image of post [شرح] تعدد المهام - ما بين أنظمة التشغيل و التطبيقات

[شرح] تعدد المهام - ما بين أنظمة التشغيل و التطبيقات

[http://www.androidauthority.com/Multitasking]

بالرغم من إنتشار مصطلح تعدد المهام في عالم البرمجيات وأنظمة التشغيل للهواتف الذكية إلا أننا للأسف للآن لم نرى تطبيقات حقيقة تعمل بشكل متعدد المهام، ماذا تقول يا رجل؟

نعم، إنه الواقع حيث أننا لو أمعنا النظر في كيفية عمل أغلب التطبيقات الشهيرة سنجدها لا تؤدي عدة مهام في وقت وحاد، ولكنني أستطيع أن أقوم بفتح أكثر من تطبيق في نفس الوقت ولا يوجد أي تطبيق يمنعني من ذلك، ألا تعتبر هذه عدة مهام في وقت واحد؟

في الواقع إن تشغيل عدة تطبيقات في وقت واحد هي خير دليل على تعدد المهام ولكن للأسف فإن هذا المصطلح الغني والعميق لا يتم أخذه على محمله الصحيح عند التحدث عن التطبيقات، ولكن يتم الخلط في إستخدامه ما بين التطبيقات وأنظمة التشغيل، فبينما بكل سلاسة تقدم أنظمة التشغيل الحديثة كلها تقريباً خاصية تعدد المهام فإن التطبيقات مازالت تخطو خطواتها الأولى، ها ما هذا يا رجل لم أفهم؟!

حسناً، لنبسط الفكرة أكثر، إن التطبيقات التي نستخدمها على أجهزتنا المحمولة أو اللوحية أو حتى أجهزة الحاسوب الخاصة بنا تعمل بناءاً على يوفره نظام التشغيل المثبت على هذه الأجهزة، فهي لنقل أنها تعتبر نظام التشغيل المنزل الذي يتوفر على الأدوات وهي تقوم بإستغلال هذه الأدوات بطرق مختلفة للقيام بوظيفة معينة، فبينما يوفر هذا المنزل العديد من القطع للأداة نفسها فإن التطبيقات على الأغلب لا تستخدم إلا أداة واحدة من كل نوع بل تصل أحياناً لإستخدام أداة واحدة فقط من كل الأنواع، نظام التشغيل يدعم إستخدام أي عدد من الأدوات طبعاً بأخذ مواصفات الجهاز بعين الإعتبار وهنا يمكننا القول أن النظام يدعم تعدد المهام إلا أن الموضوع ليس فقط متعلق بما يقدمه النظام بل هو في أساسه يعتمد كيف سوف يعمل التطبيق داخل هذا النظام.

ربما بعد كل هذا الكلام يسأل أحدهم ما معنى تعدد المهام في التطبيقات؟ اليس المهم هو أن يدعم النظام هذه الخاصية؟ نعم، في الواقع إن أهمية دعم النظام لتعدد المهام ربما تبدو أكثر فاعليه من دعم التطبيق لهذه الخاصية وخاصة أن النظام سوف يشغل عدة تطبيقات بينما التطبيق على الأغلب سوف يشغل نفسه ويقوم بمهمة معينة، ولكنا ماذا لو تم تصميم التطبيقات لتؤدي عدة مهام في وقت واحد؟

[http://www.ibmsystemsmag.com/Multitasking]

لنفترض أن هناك تطبيق لجلب الأخبار وعرضها، لنقل أنه يعرضها بشكل عامودي بالضبط كما يفعل الفيسبوك بعرض المنشورات، للقيام بهذه العملية أولاً يجب أن يتأكد من الإتصال بالإنترنت ثانياً يجب أن يتصل بسيرفر الأخبار التي يجلب الأخبار منها ثالثاً يخزن في الـ Buffer الأخبار ثم يدخلها على معالجة معينة لتظهر لك كما هي، وكل فترة معينة يعيد الكرة لكي يبقيك على تحديث مستمر، إلا أن نظام عمل التطبيقات هو نظام خطي وبالتالي فإن هذه العمليات تجري بشكل متسلسل ولا يمكن أن تتم عملية إلا بعد إنتهاء التي قبلها، هذا في حال أن كتابة البرنامج لم تعتمد أسلوب تعدد المهام، هنا حتى لو كان المعالج مكون من 4 انوية فإنه فعلياً نواة واحدة سوف تكون فعالة لتنفيذ هذا البرنامج وسرعة التنفيذ ستعتمد على سرعة هذه النواة، لكن ماذا لو تم تطوير التطبيقات لتعمل بشكل متعدد المهام؟

لنلقي نظرة بشكل آخر على نفس التطبيق المذكور بالمثال، ولكن لنقل أن المطور أستخدم اكثر من نواة لتنفيذ برنامجه، أي قام بتوزيع الكود البرمجي على نواتين وهنا يمكننا القول أن التطبيق لن يعمل بشكل كامل بشكل تسلسلي بل أنه يعمل على شكل تطبيقين منفصلين كل واحد منهم على نواة وبشكل متزامن بحيث تظهر النتائج بشكل متزامن، هنا أيضاً ربما يكون تبادل بيانات بين جزأي البرنامج ولكن دون تعقيد الأمور فإن التطبيق سالف الذكر سوف يعمل بالشكل التالي، أولاً سيقوم التطبيق بمحاولة الإتصال بالإنترنت والوصول للسيرفر وبعدها سيقوم بجلب المعلومات أي الأخبار التي سيتم عرضها، بعدها سيتم ترتيب الأخبار وإدخالها لتقوم عملية معالجتها صورية وتجهيز شكل التطبيق وترتيب الأخبار فيه، في الواقع هنا لن يتم معالجة شكل التطبيق بعد عملية الحصول على الأخبار حيث سيتم معالجة الشكل وتصميم الصفحة او ما يسمى بالـ Layout بالتوازي مع عملية الحصول على الأخبار وجلبها، وبالتالي عند إتمام عملية جلب الأخبار سيتم فقط وضعها في قوالب معينة وإظهارها، وعند قيام المستخدم بإجراء عملية التصفح فإنه بالتأكيد سيقوم بإجراء عملية الزحلقة أو Scrolling لكي يقرا كم آخر من الأخبار التي لا تظهر وهنا سنجد أن التطبيق يقوم بإجراء بعض العمليات لتنفيذ امر الـ Scrolling وأيضاً لإجراء تغييرات على تصميم الصفحة، لا ننسى أنه في كل فترة يجب أن يقوم بجلب مزيد من الأخبار عن طريق إعادة الكرة مع العملية الأولى المتمثلة بالإتصال بالسيرفر وجلب الأخبار، إلا أن وجود نواتين تعملان في نفس الوقت فإنه من الممكن جعل عملية جلب الأخبار منفصلة عن أي عملية أخرى وبالتالي فإنها لن تنقطع بسبب البدأ بإجراء عملية أخرى مثل Scrolling وغيرها.

إن العملية السابقة التي تمثل مثال بسيط جداً على إمكانية إستخدام تعدد المهام والإستفادة من تعدد الانوية سوف تشكل فارق زمني ليس هيناً في تنفيذ التطبيقات، بطبيعه الحال فإن تطبيق بسيط مثل هذا قد لا يكون بحاجة لتعدد مهام كونه بالأصل صغير ولكن بتواجد تطبيقات ضخمة وتملك الكثير من العمليات فربما أمكننا تسريع عملها إلى نصف الوقت عن طريق إستخدام نواتين أو أكثر، إلا أنه رغم ذلك وجب الوقل أن هذه العملية غير محبذة للتطبيقات الصغيرة والتي لا تستلزم تسريع كبير في وقت تنفيذها، فكما أن للعلمية هذه فوائد فإن لها مضار، فكم من مرة شعرت أن تطبيق معين بحد ذاته ثقيل على الجهاز ويسبب توقفات للبرامج ومشاكل تقنية كبير؟ لا بد أنك واجهت إحداها وأحد الأسباب الرئيسية لذلك هو أنه يستخدم كل موارد الجهاز لكي يعمل مما يتسبب في غغلاق تطبيقات رئيسية في النظام وبطأ في تنفيذ عملياته الرئيسية التي قد تكون تعتمد على نواة تم إستخدامها في التطبيق مما جعل تعليمات النظام تدخل في التسلسل الزمني لإجراء العمليات على تلك النواة إجبارياً.

في هذه المقالة تنورنا أكثر فيما يخص تعدد المهام وإستخدام أكثر من نواة، إلا أن العديد من الأسرار مازالت خفية حول عالم المعالجات متعددة الأنوية و تعدد المهام سيتم طرحها قريباً ان شاء الله في سلسلة الباب الخلفي للمعالجات متعددة الأنوية.