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

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

هذه خاصية من خصائص النظام - سواء كان برنامجًا أو حاسوبًا أو شبكة - حيث توجد نقطة تنفيذ منفصلة أو "مسار تحكم" لكل عملية. النظام المتزامن هو نظام يمكن فيه للحساب أن يتقدم دون انتظار اكتمال جميع الحسابات الأخرى. [ 1 ]

الحوسبة المتزامنة هي شكل من أشكال البرمجة المعيارية . في نموذجها ، تُقسّم العملية الحسابية الكلية إلى عمليات حسابية فرعية يمكن تنفيذها بشكل متزامن. من رواد مجال الحوسبة المتزامنة إدسكار ديكسترا ، وبير برينش هانسن ، وكار هوار . [ 2 ]

مقدمة

كثيرًا ما يُخلط بين مفهوم الحوسبة المتزامنة ومفهوم الحوسبة المتوازية ، وهو مفهوم ذو صلة ولكنه متميز عنه [ 3 ] [ 4 على الرغم من إمكانية وصف كليهما بأنهما "عمليات متعددة تُنفذ خلال نفس الفترة الزمنية ". في الحوسبة المتوازية، يحدث التنفيذ في نفس اللحظة الفيزيائية: على سبيل المثال، على معالجات منفصلة في جهاز متعدد المعالجات ، بهدف تسريع العمليات الحسابية - إذ يستحيل إجراء الحوسبة المتوازية على معالج واحد ( أحادي النواة )، حيث لا يمكن إجراء سوى عملية حسابية واحدة في أي لحظة (خلال أي دورة ساعة واحدة). [ أ ] في المقابل، تتكون الحوسبة المتزامنة من تداخل دورات حياة العمليات ، ولكن التنفيذ لا يحدث في نفس اللحظة. الهدف هنا هو نمذجة العمليات التي تحدث بشكل متزامن، مثل وصول عدة عملاء إلى خادم في نفس الوقت. يمكن أن يكون هيكلة أنظمة البرمجيات على أنها تتكون من أجزاء متعددة متزامنة ومتصلة مفيدًا لمعالجة التعقيد، بغض النظر عما إذا كان من الممكن تنفيذ الأجزاء بالتوازي أم لا. [ 5 ] : 1

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

يمكن تنفيذ العمليات الحسابية المتزامنة بالتوازي، [ 3 ] [ 6 ] على سبيل المثال، عن طريق تعيين كل عملية لمعالج منفصل أو نواة معالج، أو توزيع عملية حسابية عبر شبكة.

يعتمد التوقيت الدقيق لتنفيذ المهام في نظام متزامن على الجدولة ، وليس بالضرورة أن تُنفذ المهام بالتزامن دائمًا. على سبيل المثال، إذا افترضنا وجود مهمتين، T1 و T2:

  • يمكن تنفيذ T1 وإنهاؤها قبل T2 أو العكس (متسلسلة ومتسلسلة )
  • يمكن تنفيذ T1 و T2 بالتناوب (بشكل تسلسلي ومتزامن ).
  • يمكن تنفيذ T1 و T2 في نفس اللحظة الزمنية (متوازية ومتزامنة ).

تُستخدم كلمة "متسلسل" كمرادف لكل من "متزامن" و"متوازي"؛ وعند التمييز بينهما صراحةً، يُستخدم مصطلحا " متزامن/متسلسل" و" متوازي/تسلسلي" كأزواج متضادة. [ 7 ] يُطلق على الجدول الزمني الذي تُنفذ فيه المهام واحدة تلو الأخرى (تسلسليًا، بدون توازي)، دون تداخل (تسلسليًا، بدون تزامن: لا تبدأ أي مهمة حتى تنتهي المهمة السابقة) اسم الجدول الزمني التسلسلي . ويمكن جدولة مجموعة من المهام تسلسليًا ، مما يُبسط التحكم في التزامن .

تنسيق الوصول إلى الموارد المشتركة

يتمثل التحدي الرئيسي في تصميم البرامج المتزامنة في التحكم بالتزامن : ضمان التسلسل الصحيح للتفاعلات أو الاتصالات بين عمليات التنفيذ الحسابية المختلفة، وتنسيق الوصول إلى الموارد المشتركة بين هذه العمليات. [ 6 ] تشمل المشكلات المحتملة حالات التنافس ، والتعطل ، ونقص الموارد . على سبيل المثال، لننظر إلى الخوارزمية التالية لسحب الأموال من حساب جاري ممثل بالمورد المشترك balance:

دالة منطقية للسحب ( عدد صحيح للسحب ){إذا كان ( الرصيد >= السحب ){الرصيد = السحب ؛أعد القيمة true ؛}أرجع خطأ ؛}

لنفترض أن لدينا خيطينbalance = 500 متزامنين يقومان باستدعاء الدالتين و . إذا تم تنفيذ السطر 3 في كلتا العمليتين قبل السطر 5، فستجد كلتا العمليتين أن قيمة تساوي صفرًا ، وسيبدأ التنفيذ بطرح مبلغ السحب. مع ذلك، ولأن كلتا العمليتين تقومان بعمليات السحب، فإن إجمالي المبلغ المسحوب سيتجاوز الرصيد الأصلي. تستفيد هذه الأنواع من المشاكل المتعلقة بالموارد المشتركة من استخدام التحكم في التزامن، أو الخوارزميات غير الحظرية .withdraw(300)withdraw(350)balance >= withdrawaltrue

المزايا

توجد مزايا للحوسبة المتزامنة:

  • زيادة إنتاجية البرنامج - يسمح التنفيذ المتوازي للخوارزمية المتزامنة بزيادة عدد المهام المنجزة في وقت معين بما يتناسب مع عدد المعالجات وفقًا لقانون غوستافسون . [ 8 ]
  • تتميز البرامج التي تتطلب استجابة عالية للإدخال/الإخراج بأنها تنتظر في الغالب اكتمال عمليات الإدخال أو الإخراج. وتتيح البرمجة المتزامنة استغلال الوقت الذي كان سيُهدر في الانتظار لإنجاز مهمة أخرى. [ 9 ]
  • بنية برنامج أكثر ملاءمة - بعض المشكلات ومجالات المشكلات مناسبة تمامًا للتمثيل كمهام أو عمليات متزامنة. على سبيل المثال، MVCC .

نماذج

ظهرت شبكات بتري عام 1962 كمحاولة مبكرة لتقنين قواعد التنفيذ المتزامن. وقد بُنيت نظرية تدفق البيانات لاحقًا على هذه الشبكات، وتم ابتكار بنى تدفق البيانات لتطبيق أفكارها عمليًا. وابتداءً من أواخر سبعينيات القرن العشرين، طُوّرت حسابات العمليات ، مثل حساب الأنظمة المتصلة (CCS) وحساب العمليات المتسلسلة المتصلة (CSP)، لإتاحة الاستدلال الجبري حول الأنظمة المؤلفة من مكونات متفاعلة. وأضاف حساب باي (π) إمكانية الاستدلال حول البنى الديناميكية.

تم إدخال آلات الإدخال/الإخراج في عام 1987.

تم أيضًا تطوير منطق مثل TLA+ الخاص بـ Lamport ، ونماذج رياضية مثل التتبعات ومخططات أحداث الممثل ، لوصف سلوك الأنظمة المتزامنة.

تستعير ذاكرة المعاملات البرمجية من نظرية قواعد البيانات مفهوم المعاملات الذرية وتطبقها على عمليات الوصول إلى الذاكرة.

نماذج الاتساق

يجب أن تمتلك لغات البرمجة المتزامنة وبرامج المعالجات المتعددة نموذجًا للاتساق (يُعرف أيضًا بنموذج الذاكرة). يحدد نموذج الاتساق قواعد كيفية إجراء العمليات على ذاكرة الحاسوب وكيفية إنتاج النتائج.

كان نموذج الاتساق التسلسلي لليزلي لامبورت من أوائل نماذج الاتساق . الاتساق التسلسلي هو خاصية البرنامج التي تجعل تنفيذه ينتج نفس نتائج برنامج تسلسلي. تحديدًا، يكون البرنامج متسقًا تسلسليًا إذا كانت "نتائج أي تنفيذ هي نفسها كما لو تم تنفيذ عمليات جميع المعالجات بترتيب تسلسلي معين، وتظهر عمليات كل معالج على حدة في هذا التسلسل بالترتيب المحدد في برنامجه". [ 10 ]

تطبيق

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

التفاعل والتواصل

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

التواصل عبر الذاكرة المشتركة
تتواصل المكونات المتزامنة عن طريق تغيير محتويات مواقع الذاكرة المشتركة (كما هو الحال في لغتي جافا وسي شارب ). يتطلب هذا النمط من البرمجة المتزامنة عادةً استخدام نوع من أنواع التأمين (مثل الأقفال المتبادلة ، أو الإشارات ، أو المراقبات ) للتنسيق بين الخيوط. يُقال إن البرنامج الذي يُنفذ أيًا من هذه الوسائل بشكل صحيح آمن للخيوط .
التواصل عبر تمرير الرسائل
تتواصل المكونات المتزامنة عبر تمرير الرسائل (تبادل الرسائل، كما هو الحال في MPI و Go و Scala و Erlang و occam ). قد يتم تبادل الرسائل بشكل غير متزامن، أو باستخدام أسلوب "اللقاء" المتزامن حيث ينتظر المرسل حتى يتم استلام الرسالة. قد يكون تمرير الرسائل غير المتزامن موثوقًا أو غير موثوق (يُشار إليه أحيانًا باسم "الإرسال والانتظار"). يميل التزامن عبر تمرير الرسائل إلى أن يكون أسهل بكثير في الفهم من التزامن في الذاكرة المشتركة، ويُعتبر عادةً شكلاً أكثر قوة من البرمجة المتزامنة. [ 11 ] تتوفر مجموعة واسعة من النظريات الرياضية لفهم وتحليل أنظمة تمرير الرسائل، بما في ذلك نموذج الممثل ، وحسابات العمليات المختلفة . يمكن تنفيذ تمرير الرسائل بكفاءة عبر المعالجة المتعددة المتناظرة ، مع أو بدون تماسك ذاكرة التخزين المؤقت المشتركة .

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

تاريخ

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

بدأت الدراسة الأكاديمية للخوارزميات المتزامنة في الستينيات، وينسب إلى ديكسترا (1965) الفضل في كونه أول ورقة بحثية في هذا المجال، حيث قام بتحديد وحل مشكلة الاستبعاد المتبادل . [ 12 ]

انتشار

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

على مستوى لغة البرمجة:

على مستوى نظام التشغيل:

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

اللغات التي تدعم البرمجة المتزامنة

لغات البرمجة المتزامنة هي لغات برمجة تستخدم بنيات لغوية للتزامن . قد تشمل هذه البنيات تعدد الخيوط ، ودعم الحوسبة الموزعة ، وتمرير الرسائل ، والموارد المشتركة (بما في ذلك الذاكرة المشتركة )، أو المستقبلات والوعود . تُوصف هذه اللغات أحيانًا بأنها لغات موجهة نحو التزامن أو لغات برمجة موجهة نحو التزامن (COPL). [ 13 ]

اليوم، تُعدّ لغتا جافا وسي شارب من أكثر لغات البرمجة استخدامًا والتي تتضمن بنى خاصة بالتزامن . تعتمد كلتا اللغتين بشكل أساسي على نموذج التزامن القائم على الذاكرة المشتركة، مع توفير آليات القفل بواسطة المراقبين (مع إمكانية تطبيق نماذج تمرير الرسائل، وقد تم تطبيقها بالفعل، فوق نموذج الذاكرة المشتركة الأساسي). ومن بين اللغات التي تستخدم نموذج التزامن القائم على تمرير الرسائل، كانت إرلانج على الأرجح الأكثر استخدامًا في الصناعة حتى عام 2010.

طُوِّرت العديد من لغات البرمجة المتزامنة في الأصل كلغات بحثية (مثل Pict ) أكثر من كونها لغات للاستخدام الإنتاجي. مع ذلك، شهدت لغات مثل Erlang و Limbo و occam استخدامًا صناعيًا في فترات متفرقة خلال العشرين عامًا الماضية. فيما يلي قائمة غير شاملة للغات التي تستخدم أو توفر إمكانيات البرمجة المتزامنة:

توفر العديد من اللغات الأخرى دعمًا للتزامن في شكل مكتبات ، بمستويات قابلة للمقارنة تقريبًا مع القائمة المذكورة أعلاه.

انظر أيضاً

ملحوظات

  1. هذا يستثني التوازي الداخلي لنواة المعالج، مثل تقنية خطوط الأنابيب أو التعليمات المتجهة.قد يكون الجهاز ذو النواة الواحدة والمعالج الواحد قادرًا على بعض التوازي، كما هو الحال مع المعالج المساعد ، لكن المعالج وحده لا يستطيع ذلك.

مراجع

  1. مفاهيم أنظمة التشغيل، الطبعة التاسعة، أبراهام سيلبرشاتز. "الفصل الرابع: الخيوط"
  2. ^ هانسن، بير برينش، أد. (2002). أصل البرمجة المتزامنة . دوى : 10.1007/978-1-4757-3472-0 . رقم ISBN 978-1-4419-2986-0. S2CID 44909506 . 
  3. 1 2 بايك، روب (11 يناير 2012). "التزامن ليس توازياً". مؤتمر وازا ، 11 يناير 2012. تم استرجاعه من http://talks.golang.org/2012/waza.slide (الشرائح) و http://vimeo.com/49718712 (الفيديو).
  4. "التوازي مقابل التزامن" . موسوعة هاسكل .
  5. شنايدر، فريد ب. (6 مايو 1997). حول البرمجة المتزامنة . سبرينغر. ISBN 9780387949420.
  6. 1 2 بن آري، مردخاي (2006). مبادئ البرمجة المتزامنة والموزعة ( الطبعة الثانية). أديسون-ويسلي. ISBN  978-0-321-31283-9.
  7. باترسون وهينيسي 2013 ، ص 503.
  8. ^ بادوا ، ديفيد (2011). موسوعة الحوسبة المتوازية . سبرينغر نيويورك، نيويورك (تم النشر في 8 سبتمبر 2011). ص 819 – 825. ISBN  978-0-387-09765-7.
  9. "الإدخال/الإخراج غير المتزامن" ، ويكيبيديا ، 2024-12-20 ، تاريخ الاطلاع 2024-12-27
  10. لامبورت، ليزلي (1 سبتمبر 1979). "كيفية صنع حاسوب متعدد المعالجات يُنفذ برامج متعددة العمليات بشكل صحيح". معاملات IEEE في مجال الحواسيب . C-28 (9): 690-691 . Bibcode : 1979ITCmp.100..690L . doi : 10.1109/TC.1979.1675439 . S2CID 5679366 . 
  11. لانج، جوليان؛ نج، نيكولاس؛ تونينيو، برناردو؛ يوشيدا، نوبوكو (يناير 2017). "حماية لعبة غو: الحيوية والأمان في البرمجة القائمة على القنوات". وقائع ندوة ACM SIGPLAN الرابعة والأربعين حول مبادئ لغات البرمجة . الصفحات 748-761 . doi : 10.1145/3009837.3009847 . ISBN  978-1-4503-4660-3.
  12. جائزة PODC للأوراق البحثية المؤثرة: 2002. ندوة ACM حول مبادئ الحوسبة الموزعة (تقرير) . تم الاطلاع عليه بتاريخ 24-08-2009 .
  13. أرمسترونغ، جو (2003). "بناء أنظمة موزعة موثوقة في ظل وجود أخطاء برمجية" (ملف PDF) . مؤرشف من النسخة الأصلية (ملف PDF) بتاريخ 15 أبريل 2016.
  14. "رأس المكتبة القياسية <thread> (C++11)" . en.cppreference.com . تم الاطلاع عليه بتاريخ 2024-10-03 .
  15. "رأس المكتبة القياسية <coroutine> (C++20)" . en.cppreference.com . تم الاطلاع عليه بتاريخ 2024-10-03 .
  16. مارلو، سيمون (2013) البرمجة المتوازية والمتزامنة في هاسكل: تقنيات للبرمجة متعددة النوى ومتعددة الخيوط ISBN 9781449335946
  17. "البرمجة المتزامنة والمتوازية في لغة جوليا - مؤتمر جوليا الهند 2015 - قناة هاس جيك توك فانل" . juliacon.talkfunnel.com . مؤرشف من الأصل بتاريخ 18 أكتوبر 2016.
  18. "PHP: parallel – Manual" . www.php.net . تم الاطلاع عليه بتاريخ 2024-10-03 .
  19. التوثيق: مكتبة بايثون القياسية: التنفيذ المتزامن
  20. "التزامن" . docs.perl6.org . تم الاطلاع عليه بتاريخ 24-12-2017 .
  21. بلوم، بن (2012). "حالة قابلة للتغيير مشتركة آمنة من حيث النوع" . تم الاسترجاع في 14-11-2012 .
  22. "التزامن" . 2022. تم الاسترجاع في 15-12-2022 .

مصادر

  • باترسون، ديفيد أ.؛ هينيسي، جون ل. (2013). تنظيم وتصميم الحاسوب: واجهة العتاد/البرمجيات . سلسلة مورغان كوفمان في هندسة وتصميم الحاسوب (  الطبعة الخامسة). مورغان كوفمان. ISBN 978-0-12407886-4.

للمزيد من القراءة

  • شعار ويكيميديا ​​كومنزالوسائط المتعلقة بالبرمجة المتزامنة على ويكيميديا ​​كومنز
  • مكتبة الأنظمة المتزامنة الافتراضية