حوسبة متزامنة

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

تُعد الحوسبة التزامنية إحدى خصائص الأنظمة، إنْ كان النظام مجرد برنامج واحد أو حاسوب أو شبكة من الحواسيب.

تصنف الحوسبة التزامنية كنمط برمجي على أنها شكل من أشكال البرمجة التركيبية -  Modular programming، بمعنى أن يتم تقسيم عملية حسابية ضخمة إلى عدة عمليات حسابية فرعية يمكن تنفيذها بشكل متزامن.

عادة ما يتم الخلط بين مفهوم الحوسبة التزامنية والحوسبة المتوازية، رغم أن كلا المفهومين يمكن تعريفهم بتنفيذ عدة عمليات خلال فترة زمنية واحدة.

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

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

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

يعتمد الوقت التي تُنفّذ فيه العملية في النظام المتزامن على جدولة العمليات والمهام، مثلا لو كان لديك المهمة أ والمهمة ب:
 ربما يتم تنفيذ العملية أ وإنهائها قبل انتهاء العملية ب، والعكس صحيح.
 العملية أ والعملية ب يتم تنفيذهم بشكل متبادل.
 العملية أ والعملية ب يتم تنفيذهم بشكل متزامن بنفس اللحظة الزمنية.

تنظيم الوصول إلى الموارد المشتركة 
إن من التحديات الرئيسية التي تُواجه عند بناء برامج متزامنة، هي التحكم في العمليات المتزامنة (التحكم التزامنيّ) والتأكد من أنها ستُنفّذ بالتسلسل الصحيح لها وفقاً للجدولة، وتنظيم عملية الوصول إلى الموارد المشتركة بين العمليات المنفَّذة.

من المشاكل المحتملة هي حالات التسابق ومشكلة الاستعصاء. لنأخذ مثالاً الخوارزمية التالية والتي تقوم بسحب مبلغ من المال من حساب بنكيّ:

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

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

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

مراجع 

اختراعات هولندية
إدسخر ديكسترا
تقنيات نظم التشغيل