حوسبة متزامنة
قبل الخوض في التفاصيل، الحوسبة المتزامنة شكل من أشكال الحوسبة حيث تنفذ العمليات الحسابية على فترات زمنية متداخلة أي متزامنة، لا متعاقبة. لغة سي مثال لغة برمجة متزامنه. حيث تقوم على معالجة عدة عمليات حسابية في فترات زمنية متقاطعة، وهو النظام الذي يمكن فيه تنفيذ العمليات بشكل متزامن (أكثر من عملية حسابية بدون انتظار العمليات الأخرى لتتم) وليس بشكل متتابع (واحد تنتهي قبل بدا ية الأخرى. وتعرض الأقسام التالية جوانب أخرى من الموضوع.
ومن جهة أخرى، في الحوسبة المتوازية يتم تنفيذ المهام في نفس اللحظة تماماً، فمثلاً لهدف تسريع العمليات الحسابية في المعالجات المتعددة، لا يمكن استخدام الحوسبة المتوازية على معالج واحد، لأنه لا يمكن تنفيذ غير عملية حسابية واحدة في لحظة زمنية واحدة على كل معالج. بالمقابل تقوم الحوسبة التزامنية على معالجة عدة عمليات في وقت زمني واحد على نفس المعالج، ولكن بدْءُ تنفيذها لا يشترط أن يكون في وقت واحد.
علاوةً على ذلك، عادة ما يتم الخلط بين مفهوم الحوسبة التزامنية والحوسبة المتوازية، رغم أن كلا المفهومين يمكن تعريفهم بتنفيذ عدة عمليات خلال فترة زمنية واحدة.
وفي هذا الصدد، تصنف الحوسبة التزامنية كنمط برمجي على أنها شكل من أشكال البرمجة التركيبية - Modular programming، بمعنى أن يتم تقسيم عملية حسابية ضخمة إلى عدة عمليات حسابية فرعية يمكن تنفيذها بشكل متزامن.
ومن ناحية أخرى، يمكن تنفيذ العمليات التزامنيّة على معالج واحد من خلال تداخل خطوات التنفيذ بإعطاء كل عملية حاسوبية وقت مخصص لها؛ حيث تبدأ عملية واحدة في الوقت المخصص لها وإذا لم تنتهِ بتلك الفترة يتم إيقافها، وتشغيل عملية أخرى، ولاحقًا يتم إعادة تشغيل العملية الأولى.
- ربما يتم تنفيذ العملية أ وإنهائها قبل انتهاء العملية ب، والعكس صحيح.
- العملية أ والعملية ب يتم تنفيذهم بشكل متبادل.
- العملية أ والعملية ب يتم تنفيذهم بشكل متزامن بنفس اللحظة الزمنية.
وفي السياق ذاته، تُعد الحوسبة التزامنية إحدى خصائص الأنظمة، إنْ كان النظام مجرد برنامج واحد أو حاسوب أو شبكة من الحواسيب.
وفي هذا السياق، كما يمكن أن يتم تنفيذ العمليات الحسابية بشكل متوازٍ، من خلال إعطاء كل عملية لمعالج منفصل حتى يعالجها، أو توزيع العمليات الحسابية على شبكة من مختلف الحواسيب، ولكن بشكل عام فإن اللغات البرمجية والأدوات والطرق المستعملة في البرمجة المتوازية يمكن أن لا تتناسب مع البرمجة التزامنيّة، والعكس صحيح.
وفي هذا الصدد، يعتمد الوقت التي تُنفّذ فيه العملية في النظام المتزامن على جدولة العمليات والمهام، مثلا لو كان لديك المهمة أ والمهمة ب:
تنظيم الوصول إلى الموارد المشتركة
bool withdraw(int withdrawal)
ومن ناحية أخرى، من المشاكل المحتملة هي حالات التسابق ومشكلة الاستعصاء. لنأخذ مثالاً الخوارزمية التالية والتي تقوم بسحب مبلغ من المال من حساب بنكيّ:
وعلى صعيد آخر، إن من التحديات الرئيسية التي تُواجه عند بناء برامج متزامنة، هي التحكم في العمليات المتزامنة (التحكم التزامنيّ) والتأكد من أنها ستُنفّذ بالتسلسل الصحيح لها بحسب الجدولة، وتنظيم عملية الوصول إلى الموارد المشتركة بين العمليات المنفَّذة.
الميّزات
هناك الكثير من الميّزات للحوسبة التزامنية:
وفي هذا السياق، زيادة سرعة البرنامج - حيث أن التنفيذ المتوازي للعمليات الحسابية يسمح بتنفيذ عدة مهام في وقت واحد.
وفي السياق ذاته، هيكلة البرنامج تكون متناسبة جداً في بعض المجالات التي يكون فيها من المهم تنفذ عدة مهام في وقت واحد.
وفي هذا الصدد، يعتبر النظام المتزامن نظاماً تجاوبياً في الأنظمة التي تعتمد على المدخلات والمخرجات إلى حدّ كبير، حيث يمكن استغلال الوقت الذي تقضيه إحدى عمليات الإدخال بأن يتم معالجة عملية أخرى في ذات الوقت.
{
- if (balance >= withdrawal)
- {
- balance -= withdrawal;
- return true;
- }
- return false;
}
وفي هذا الصدد، لنفترض أن رصيد الحساب = 500، وهناك عمليتان متزامنتان لسحب مبلغين من المال، الأول 300 والآخر 350. إذا تم تنفيذ السطر الثالث من الخوارزمية قبل السطر الخامس، فكلتا العمليتان سوف تجدان أن الرصيد المتوفر أكبر من المبلغ المراد سحبه balance >= withdrawal == true، وبالتالي سيتم تنفيذ عملية السحب. ولكن لأن كلتا العمليتان سوف تقومان بسحب المبلغ، فإن مجموع المبالغ المراد سحبها سوف يكون أكبر من الرصيد المتوفر فعليًا في الحساب، هذا النوع من المشاكل مع الموارد المشتركة بحاجة إلى استخدام التحكم التزامنيّ لتنظيم العمليات، أو الخوارزميات غير المسدود.
وفي هذا الصدد، لأن الأنظمة المتوازية تعتمد على الاستخدام المشترك للموارد، فإن الحوسبة التزامنية بشكل عام تحتاج إلى وسيط لتنظيم عمليات الوصول إلى هذه الموارد.
📝 هل في هذه المقالة خطأ؟
إذا وجدت معلومة تحتاج تصحيحاً أو إضافة، أو أردت حذف المقالة، أرسل لنا طلباً وسنراجعه.
ما رأيك في هذه المقالة؟