الحوسبة المتزامنة
الحوسبة المتزامنة هي شكل من أشكال الحوسبة يتم فيها تنفيذ العديد من العمليات الحسابية بشكل متزامن - خلال فترات زمنية متداخلة - بدلاً من تنفيذها بالتسلسل - بحيث تكتمل إحداها قبل أن تبدأ الأخرى.
هذه خاصية من خصائص النظام - سواء كان برنامجًا أو حاسوبًا أو شبكة - حيث توجد نقطة تنفيذ منفصلة أو "مسار تحكم" لكل عملية. النظام المتزامن هو نظام يمكن فيه للحساب أن يتقدم دون انتظار اكتمال جميع الحسابات الأخرى. [ 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 استخدامًا صناعيًا في فترات متفرقة خلال العشرين عامًا الماضية. فيما يلي قائمة غير شاملة للغات التي تستخدم أو توفر إمكانيات البرمجة المتزامنة:
- لغة آدا – لغة متعددة الأغراض، مع دعم أصلي لتمرير الرسائل والتزامن القائم على المراقبة
- ألف – لغة برمجة متزامنة، مع خيوط وتمرير رسائل، لبرمجة الأنظمة في الإصدارات المبكرة من برنامج Plan 9 من مختبرات بيل
- أليس – امتداد للغة Standard ML ، يضيف دعمًا للتزامن عبر المستقبلات
- أتيجي بي إكس – امتداد للغة جافا مع عناصر أساسية متوازية مستوحاة من حساب التفاضل والتكامل π
- أكسوم – خاص بمجال معين، متزامن، يعتمد على نموذج الممثل وبيئة تشغيل لغة .NET المشتركة باستخدام بنية تشبه لغة C
- آلة تدفق البيانات المعيارية الثنائية (BMDFM)
- C++ – مكتبات دعم الخيوط والروتينات الفرعية [ 14 ] [ 15 ]
- Cω (سي أوميغا) – للأبحاث، وهي امتداد للغة C#، وتستخدم الاتصال غير المتزامن
- لغة C# – تدعم الحوسبة المتزامنة باستخدام lock و yield ، بالإضافة إلى الكلمات المفتاحية async و await التي تم تقديمها منذ الإصدار 5.0
- كلوجر – لهجة برمجة وظيفية حديثة من لغة ليسب على منصة جافا
- البرمجة الوظيفية المتزامنة النظيفة ، على غرار لغة هاسكل
- تُحقق المجموعات المتزامنة (CnC) التوازي الضمني بشكل مستقل عن نموذج الذاكرة من خلال تحديد تدفق البيانات والتحكم بشكل صريح.
- هاسكل المتزامنة - لغة وظيفية بحتة كسولة تُشغّل عمليات متزامنة على ذاكرة مشتركة
- التعلم الآلي المتزامن – امتداد متزامن للتعلم الآلي القياسي
- باسكال المتزامن - بقلم بير برينش هانسن
- كاري
- D – لغة برمجة أنظمة متعددة النماذج مع دعم صريح للبرمجة المتزامنة ( نموذج الممثل )
- يستخدم E – الوعود لمنع حالات الجمود
- ECMAScript – يستخدم الوعود للعمليات غير المتزامنة
- إيفل – من خلال آلية SCOOP الخاصة بها القائمة على مفاهيم التصميم التعاقدي
- Elixir – لغة برمجة ديناميكية ووظيفية واعية بالبرمجة الوصفية تعمل على آلة Erlang الافتراضية، وتستخدم تمرير الرسائل غير المتزامن بدون ذاكرة مشتركة
- إرلانج – لغة ديناميكية ووظيفية تعمل على آلة إرلانج الافتراضية، والتي تستخدم تمرير الرسائل غير المتزامن بدون ذاكرة مشتركة
- FAUST – برنامج وظيفي يعمل في الوقت الحقيقي، لمعالجة الإشارات، يوفر المترجم توازيًا تلقائيًا عبر OpenMP أو جدولة محددة لسرقة العمل
- تُعد وظيفتي coarrays و do concurrent في لغة فورتران جزءًا من معيار فورتران 2008.
- Go – لبرمجة الأنظمة، مع نموذج برمجة متزامنة يعتمد على العمليات المتسلسلة المتصلة (CSP)
- هاسكل - لغة برمجة وظيفية متزامنة ومتوازية [ 16 ]
- هيوم – وظيفي، متزامن، للبيئات ذات المساحة والوقت المحدودين حيث يتم وصف عمليات الأتمتة بواسطة أنماط القنوات المتزامنة وتمرير الرسائل
- Io – التزامن القائم على الممثل
- يتميز Janus بوجود باحثين ومخبرين متميزين للمتغيرات المنطقية وقنوات الحقائب؛ وهو تصريحي بحت
- جافا – فئة الخيوط أو واجهة Runable
- جوليا – أساسيات البرمجة المتزامنة: المهام، الانتظار غير المتزامن، القنوات [ 17 ]
- جافا سكريبت – عبر عمال الويب ، في بيئة المتصفح، والوعود ، وردود الاتصال
- JoCaml – امتداد لـ OCaml قائم على القنوات المتزامنة والموزعة ، وينفذ حساب الربط للعمليات
- انضم إلى Java - متزامن، يعتمد على لغة Java
- جول – يعتمد على تدفق البيانات، ويتواصل عن طريق تمرير الرسائل
- جويس – متزامن، تعليمي، مبني على لغة باسكال المتزامنة مع ميزات من لغة باسكال المتزامنة لبير برينش هانسن
- LabVIEW – برنامج رسومي، يعتمد على تدفق البيانات، حيث تمثل الدوال العقد في الرسم البياني، والبيانات عبارة عن أسلاك تربط بين العقد؛ ويتضمن لغة برمجة كائنية التوجه.
- ليمبو – قريب من ألف ، لبرمجة النظام في إنفيرنو (نظام التشغيل)
- لغة لوكموتيف بيسك - وهي نسخة من لغة بيسك لأجهزة أمستراد، تحتوي على أوامر EVERY و AFTER لتنفيذ إجراءات فرعية متزامنة
- MultiLisp – نسخة معدلة من لغة Scheme موسعة لدعم التوازي
- Modula-2 – لغة برمجة أنظمة، من تطوير نيكلاوس ويرث، كخليفة للغة باسكال مع دعم أصلي للروتينات الفرعية
- Modula-3 – عضو حديث في عائلة ALGOL مع دعم واسع النطاق للخيوط، والأقفال المتبادلة، ومتغيرات الحالة
- نيوزكويك – للأبحاث، مع اعتبار القنوات قيماً أساسية؛ سلف ألف
- أوكام – تتأثر بشكل كبير بعمليات التواصل التسلسلي (CSP)
- أوكام-π – صيغة حديثة من أوكام ، تتضمن أفكارًا من حساب التفاضل والتكامل π لميلنر
- أوبجكت ريكس (ooRexx) – نظام تبادل رسائل قائم على الكائنات للتواصل والمزامنة
- أورك – متزامن للغاية، غير حتمي، قائم على جبر كلين
- أوز-موزارت – متعدد النماذج، يدعم التزامن القائم على الحالة المشتركة وتمرير الرسائل، والمستقبلات
- ParaSail - كائنية التوجه، متوازية، خالية من المؤشرات، وحالات التزامن
- PHP – دعم تعدد الخيوط مع امتداد متوازي ينفذ تمرير الرسائل المستوحى من Go [ 18 ]
- Pict – هو في الأساس تطبيق قابل للتنفيذ لحساب التفاضل والتكامل π الخاص بميلنر
- بايثون – تستخدم التوازي القائم على الخيوط والتوازي القائم على العمليات [ 19 ]
- Raku – يتضمن فئات للخيوط والوعود والقنوات بشكل افتراضي [ 20 ]
- ريا – تستخدم تمرير الرسائل غير المتزامن بين الكائنات التي لا تشترك في شيء
- Red/System – لبرمجة الأنظمة، استنادًا إلى Rebol
- Rust – لبرمجة الأنظمة، باستخدام تمرير الرسائل مع دلالات النقل، والذاكرة المشتركة (غير القابلة للتغيير والقابلة للتغيير) [ 21 ]
- سكالا – لغة برمجة عامة الأغراض، مصممة للتعبير عن أنماط البرمجة الشائعة بطريقة موجزة وأنيقة وآمنة من حيث النوع
- SequenceL – برنامج وظيفي للأغراض العامة، تتمثل أهداف تصميمه الرئيسية في سهولة البرمجة، ووضوح الكود وسهولة قراءته، والتوازي التلقائي لتحسين الأداء على الأجهزة متعددة النوى، وخلوه التام من حالات التزامن.
- SR – للأبحاث
- SuperPascal – لغة برمجة متزامنة، مخصصة للتعليم، مبنية على Concurrent Pascal و Joyce من تطوير بير برينش هانسن
- Swift – دعم مدمج لكتابة التعليمات البرمجية غير المتزامنة والمتوازية بطريقة منظمة [ 22 ]
- يونيكون - لأغراض البحث
- لغة مواصفات ووصف شركة TeleNokia ( TNSDL ) - لتطوير مقاسم الاتصالات، وتستخدم تمرير الرسائل غير المتزامن
- لغة وصف الأجهزة VHSIC ( VHDL ) – معيار IEEE 1076
- XC – مجموعة فرعية موسعة للتزامن من لغة C طورتها شركة XMOS ، وتعتمد على العمليات المتسلسلة المتصلة ، وبنيات مدمجة للإدخال/الإخراج القابل للبرمجة
توفر العديد من اللغات الأخرى دعمًا للتزامن في شكل مكتبات ، بمستويات قابلة للمقارنة تقريبًا مع القائمة المذكورة أعلاه.
انظر أيضاً
ملحوظات
- ↑ هذا يستثني التوازي الداخلي لنواة المعالج، مثل تقنية خطوط الأنابيب أو التعليمات المتجهة.قد يكون الجهاز ذو النواة الواحدة والمعالج الواحد قادرًا على بعض التوازي، كما هو الحال مع المعالج المساعد ، لكن المعالج وحده لا يستطيع ذلك.
مراجع
- ↑ مفاهيم أنظمة التشغيل، الطبعة التاسعة، أبراهام سيلبرشاتز. "الفصل الرابع: الخيوط"
- ^ هانسن، بير برينش، أد. (2002). أصل البرمجة المتزامنة . دوى : 10.1007/978-1-4757-3472-0 . رقم ISBN 978-1-4419-2986-0. S2CID 44909506 .
- 1 2 بايك، روب (11 يناير 2012). "التزامن ليس توازياً". مؤتمر وازا ، 11 يناير 2012. تم استرجاعه من http://talks.golang.org/2012/waza.slide (الشرائح) و http://vimeo.com/49718712 (الفيديو).
- ↑ "التوازي مقابل التزامن" . موسوعة هاسكل .
- ↑ شنايدر، فريد ب. (6 مايو 1997). حول البرمجة المتزامنة . سبرينغر. ISBN 9780387949420.
- 1 2 بن آري، مردخاي (2006). مبادئ البرمجة المتزامنة والموزعة ( الطبعة الثانية). أديسون-ويسلي. ISBN 978-0-321-31283-9.
- ↑ باترسون وهينيسي 2013 ، ص 503.
- ^ بادوا ، ديفيد (2011). موسوعة الحوسبة المتوازية . سبرينغر نيويورك، نيويورك (تم النشر في 8 سبتمبر 2011). ص 819 – 825. ISBN 978-0-387-09765-7.
- ↑ "الإدخال/الإخراج غير المتزامن" ، ويكيبيديا ، 2024-12-20 ، تاريخ الاطلاع 2024-12-27
- ↑ لامبورت، ليزلي (1 سبتمبر 1979). "كيفية صنع حاسوب متعدد المعالجات يُنفذ برامج متعددة العمليات بشكل صحيح". معاملات IEEE في مجال الحواسيب . C-28 (9): 690-691 . Bibcode : 1979ITCmp.100..690L . doi : 10.1109/TC.1979.1675439 . S2CID 5679366 .
- ↑ لانج، جوليان؛ نج، نيكولاس؛ تونينيو، برناردو؛ يوشيدا، نوبوكو (يناير 2017). "حماية لعبة غو: الحيوية والأمان في البرمجة القائمة على القنوات". وقائع ندوة ACM SIGPLAN الرابعة والأربعين حول مبادئ لغات البرمجة . الصفحات 748-761 . doi : 10.1145/3009837.3009847 . ISBN 978-1-4503-4660-3.
- ↑ جائزة PODC للأوراق البحثية المؤثرة: 2002. ندوة ACM حول مبادئ الحوسبة الموزعة (تقرير) . تم الاطلاع عليه بتاريخ 24-08-2009 .
- ↑ أرمسترونغ، جو (2003). "بناء أنظمة موزعة موثوقة في ظل وجود أخطاء برمجية" (ملف PDF) . مؤرشف من النسخة الأصلية (ملف PDF) بتاريخ 15 أبريل 2016.
- ↑ "رأس المكتبة القياسية <thread> (C++11)" . en.cppreference.com . تم الاطلاع عليه بتاريخ 2024-10-03 .
- ↑ "رأس المكتبة القياسية <coroutine> (C++20)" . en.cppreference.com . تم الاطلاع عليه بتاريخ 2024-10-03 .
- ↑ مارلو، سيمون (2013) البرمجة المتوازية والمتزامنة في هاسكل: تقنيات للبرمجة متعددة النوى ومتعددة الخيوط ISBN 9781449335946
- ↑ "البرمجة المتزامنة والمتوازية في لغة جوليا - مؤتمر جوليا الهند 2015 - قناة هاس جيك توك فانل" . juliacon.talkfunnel.com . مؤرشف من الأصل بتاريخ 18 أكتوبر 2016.
- ↑ "PHP: parallel – Manual" . www.php.net . تم الاطلاع عليه بتاريخ 2024-10-03 .
- ↑ التوثيق: مكتبة بايثون القياسية: التنفيذ المتزامن
- ↑ "التزامن" . docs.perl6.org . تم الاطلاع عليه بتاريخ 24-12-2017 .
- ↑ بلوم، بن (2012). "حالة قابلة للتغيير مشتركة آمنة من حيث النوع" . تم الاسترجاع في 14-11-2012 .
- ↑ "التزامن" . 2022. تم الاسترجاع في 15-12-2022 .
مصادر
- باترسون، ديفيد أ.؛ هينيسي، جون ل. (2013). تنظيم وتصميم الحاسوب: واجهة العتاد/البرمجيات . سلسلة مورغان كوفمان في هندسة وتصميم الحاسوب ( الطبعة الخامسة). مورغان كوفمان. ISBN 978-0-12407886-4.
للمزيد من القراءة
- ديكسترا، إي دبليو (1965). "حل مشكلة في التحكم بالبرمجة المتزامنة" . اتصالات رابطة مكائن الحوسبة . 8 (9): 569. doi : 10.1145/365559.365617 . S2CID 19357737 .
- هيرليهي، موريس (2008) [2008]. فن برمجة المعالجات المتعددة . مورغان كوفمان. ISBN 978-0123705914.
- داوني، ألين ب. (2005) [2005]. كتاب الإشارات الضوئية المختصر (ملف PDF) . دار نشر غرين تي. رقم ISBN 978-1-4414-1868-5أُرشف من النسخة الأصلية (PDF) بتاريخ 4 مارس 2016. تم الاطلاع عليه بتاريخ 21 نوفمبر 2009 .
- فيلمان، روبرت إي.؛ دانيال ب. فريدمان (1984). الحوسبة المنسقة: أدوات وتقنيات للبرمجيات الموزعة . نيويورك: ماكجرو هيل. ص 370. ISBN 978-0-07-022439-1.
- ليبايارفي، جوني (2008). دراسة عملية ذات توجه تاريخي حول عالمية بدائيات التزامن (ملف PDF) . جامعة أولو. مؤرشف من الأصل (ملف PDF) بتاريخ 30 أغسطس 2017. تاريخ الاطلاع: 13 سبتمبر 2012 .
- تاوبنفيلد، جادي (2006). خوارزميات التزامن والبرمجة المتزامنة . بيرسون / برنتيس هول. ص 433. ISBN 978-0-13-197259-9.
روابط خارجية
الوسائط المتعلقة بالبرمجة المتزامنة على ويكيميديا كومنز- مكتبة الأنظمة المتزامنة الافتراضية
- الحوسبة المتزامنة
- تقنية نظام التشغيل
