نمط الربط

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

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

وصف

نمط الربط (أو الوتر في ) أشبه بخط أنابيب فائق مع مزامنة ومطابقة. في الواقع، يُلخص هذا المفهوم بمطابقة وربط مجموعة من الرسائل المتاحة من قوائم انتظار رسائل مختلفة ، ثم معالجتها جميعًا في وقت واحد بواسطة معالج واحد. [ 1 ] يمكن تمثيله بالكلمات المفتاحية whenلتحديد أول اتصال متوقع، مع andربط/مزاوجة قنوات أخرى، وتشغيل doبعض المهام باستخدام الرسائل المختلفة المُجمعة. عادةً ما يأخذ نمط الربط المُنشأ الشكل التالي:

ج. عندما (أ1). و(أ2). ... و(أ). افعل (د) 

قد يكون الوسيط a1 قناة When(a1)متزامنة أو غير متزامنة أو مصفوفة من القنوات غير المتزامنة. يجب أن يكون كل وسيط لاحق ai للدالة (لـ ) قناة غير متزامنة. [ 2 ]And(ai)i > 1

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

على عكس معالج الأحداث، الذي يعالج أحد الأحداث البديلة المتعددة في وقت واحد، بالتزامن مع جميع المعالجات الأخرى على ذلك الحدث، ينتظر نمط الربط اقتران القنوات ويتنافس على التنفيذ مع أي نمط آخر مُفعّل. [ 4 ]

يوضح مخطط التدفق هذا كيفية تنفيذ نمط الربط من خلال مطابقة عامة مع قنوات مختلفة (انتظار وتر) ومزامنة الموارد (تحرير أو قفل).

يُعرَّف نمط الربط بمجموعة من قنوات حساب باي x التي تدعم عمليتين مختلفتين، الإرسال والاستقبال. نحتاج إلى اسمين لحساب الربط لتنفيذه: اسم قناة x للإرسال (رسالة)، واسم دالة x لاستقبال قيمة (طلب). معنى تعريف الربط هو أن استدعاء دالة يُعيد قيمة أُرسلت عبر قناة . في كل مرة تُنفَّذ فيها الدوال بشكل متزامن، يتم تشغيل عملية الإرجاع والتزامن مع عمليات الربط الأخرى. [ 5 ]x()x<>

J ::= // أنماط الربط | x < y > // نمط إرسال الرسالة | x ( y ) // نمط استدعاء الدالة | J | JBIS // التزامن

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

مخطط فئات نمط الربط

في معظم الحالات، لا يُضمن ترتيب الاستدعاءات المتزامنة لأسباب تتعلق بالأداء. وأخيرًا، أثناء عملية المطابقة، قد تُسرق الرسائل الموجودة في قائمة الانتظار بواسطة خيط وسيط؛ بل قد يضطر الخيط المُستيقظ إلى الانتظار مرة أخرى. [ 7 ]

تاريخ

حساب التفاضل والتكامل π – 1992

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

حساب التفاضل والتكامل - 1993

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

حساب الربط الموزع – 1996

يُعدّ حساب الربط (Join-Calculus) حسابًا لتمرير الأسماء ولغة أساسية للبرمجة المتزامنة والموزعة. [ 9 ] ولذلك، تم تطوير حساب الربط الموزع (Distributed Join-Calculus) [ 10 ] عام 1996 ، استنادًا إلى حساب الربط مع البرمجة الموزعة. يستخدم هذا العمل الوكلاء المتنقلين، حيث لا يقتصر دور الوكلاء على كونهم برامج فحسب، بل يمثلون أيضًا صورًا أساسية للعمليات الجارية مع إمكانيات الاتصال الخاصة بها.

JoCaml، Funnel و Join Java – 2000

تُعدّ لغتا JoCaml [ 11 ] [ 12 ] وFunnel [ 13 ] [ 14 ] لغتين وظيفيتين تدعمان أنماط الربط التصريحية. وهما تُقدّمان أفكارًا لتنفيذ حسابات العمليات بشكل مباشر في بيئة وظيفية.

تم اقتراح امتدادات أخرى للغة جافا (غير العامة)، وهي JoinJava، بشكل مستقل من قبل فون إيتزستين وكيرني. [ 15 ]

دو دييز متعدد الأصوات - 2002

اقترح كارديلي وبنتون وفورنيه نسخة كائنية التوجه من أنماط الربط للغة C# تسمى Polyphonic C# . [ 16 ]

Cω – 2003

Cω هو تكييف لحساب الربط مع بيئة البرمجة الكائنية. [ 17 ] تم تضمين هذا الإصدار من لغة C# متعددة الأصوات في الإصدار العام من Cω (المعروف أيضًا باسم Comega) في عام 2004.

انضمام سكالا – 2007

Scala Joins هي مكتبة لاستخدام نمط الربط مع Scala في سياق مطابقة الأنماط القابلة للتوسيع من أجل دمج عمليات الربط في إطار عمل التزامن القائم على الممثلين. [ 18 ]

جيرلانغ – 2009

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

نمط الربط في أدبيات البرمجة الكلاسيكية

"يمكن استخدام أنماط الربط لترميز مصطلحات التزامن ذات الصلة بسهولة مثل الممثلين والكائنات النشطة." [ 19 ]

باستخدام Microsoft.Research.Joins ؛class SymmetricBarrier { public readonly Synchronous . Channel Arrive ;public SymmetricBarrier ( int n ) { // إنشاء j وتهيئة القنوات (محذوفة) JoinPattern pat = j.When ( Arrive ) ; for ( int i = 1 ; i < n ; i ++ ) { pat = pat.And ( Arrive ) ; } pat.Do ( ( ) => { } ) ; } }
باستخدام Microsoft.Research.Joins ؛انضم j = انضم . أنشئ (); قناة متزامنة [ ] جائع ؛ قناة غير متزامنة [] عيدان طعام ؛ j . تهيئة ( إخراج جائع ، n j . تهيئة ( إخراج عيدان طعام ، n for ( int i = 0 ; i < n ; i ++ ) { Asynchronous.Channel left = chopstick [ i ]; Asynchronous.Channel right = chopstick [( i + 1 ) % n ]; j.When ( hungry [ i ] ). And ( left ) .And ( right ) .Do ( ( ) => { eat ( ) ; left ( ); right (); // استبدال عيدان الطعام }); }
باستخدام Microsoft.Research.Joins ؛class Lock { public readonly Synchronous.Channel Acquire ; public readonly Asynchronous.Channel Release ; }public Lock () { // إنشاء j وتهيئة القنوات (محذوف) j.When ( Acquire ) .And ( Release ) .Do () => { } ); Release (); // تحرير مبدئي } }
باستخدام Microsoft.Research.Joins ؛class Buffer <T> { public readonly Asynchronous.Channel <T> Put ; public readonly Synchronous <T> .Channel Get ; }public Buffer () { Join j = Join.Create (); // تخصيص كائن Join j.Init ( out Put ) ; // ربط قنواته j.Init ( out Get ) ; j.When ( Get ) .And ( Put ) .Do // تسجيل chord ( t => { return t ; } ) ; } }
باستخدام Microsoft.Research.Joins ؛class ReaderWriterLock { private readonly Asynchronous.Channel idle ; private readonly Asynchronous.Channel <int> shared ; public readonly Synchronous.Channel AcqR , AcqW , RelR , RelW ;public ReaderWriterLock () { // إنشاء j وتهيئة القنوات (محذوف) j.When ( AcqR ) .And ( idle ) .Do (() => shared(1)); j.When(AcqR) .And ( shared ) .Do ( n = > shared ( n + 1 ) ) ; j.When(RelR).And(shared ) .Do ( n = > { if ( n == 1 ) { idle ( ) ; } else { shared ( n - 1 ) ; } } ) ; j.When ( AcqW ) .And ( idle ) .Do ( ( ) = > { } ) ; j.When ( RelW ) .Do ( ( ) = > idle ( ) ) ; idle ( ) ; // حر مبدئيًا } }
باستخدام Microsoft.Research.Joins ؛class Semaphore { public readonly Synchronous.Channel Acquire ; public readonly Asynchronous.Channel Release ; }public Semaphore ( int n ) { // إنشاء j وتهيئة القنوات (محذوف) j.When ( Acquire ) .And ( Release ).Do ( () => { } ); while ( n > 0 ) { Release (); // تحرير n مبدئيًا -- n ; } } }

السمات والمفاهيم الأساسية

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

مجال التطبيق

وكيل متنقل

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

يمكن استخدام الوكلاء المتنقلين لتحقيق التزامن والتوزيع عند استخدام حساب الربط. ولذلك، تم ابتكار مفهوم جديد يُسمى "حساب الربط الموزع"؛ وهو امتداد لحساب الربط مع إضافة مواقع وعناصر أساسية لوصف الحركة. يستخدم هذا الابتكار الوكلاء كعمليات جارية، حيث تتيح قدراتهم على التواصل إمكانية تحديد الموقع، وهو موقع فعلي يُعبّر عن الموضع الفعلي للوكيل. وبفضل حساب الربط، يمكن نقل موقع ما بشكل ذري إلى موقع آخر. [ 24 ]

تُحدد عمليات الوكيل كمجموعة تُعرّف وظائفه، بما في ذلك إرسال الرسائل بشكل غير متزامن، والانتقال إلى مواقع أخرى. ونتيجةً لذلك، تُنظّم المواقع في شكل شجري لتسهيل تمثيل حركة الوكيل. ومن مزايا هذا الحل إمكانية إنشاء نموذج بسيط للأعطال. ففي العادة، يؤدي تعطل موقع فعلي إلى تعطل جميع مواقعه الأخرى بشكل دائم. ولكن باستخدام حساب الربط، يُمكن اكتشاف أي مشكلة في موقع ما في أي موقع آخر قيد التشغيل، مما يسمح باستعادة النظام بعد حدوث الخطأ. [ 24 ]

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

في عام 2007، ظهر امتداد لحساب الربط الأساسي يتضمن أساليب تجعل الوكلاء استباقيين. يمكن للوكلاء مراقبة بيئة مشتركة فيما بينهم. ومن خلال هذه البيئة، يُمكن تعريف متغيرات مشتركة مع جميع الوكلاء (مثل خدمة تسمية لاكتشاف الوكلاء فيما بينهم). [ 25 ]

تجميع

تُبنى لغات الربط على حساب الربط الذي يُعتبر لغةً أساسية. لذا، تُحلل جميع العمليات الحسابية باستخدام عمليات غير متزامنة، ويُوفر نمط الربط نموذجًا لمزامنة النتيجة. [ 9 ] ولتحقيق ذلك، يوجد نوعان من المُترجمات:

  • مُجمِّع الربط: مُجمِّع للغة تُسمى "لغة الربط". تم إنشاء هذه اللغة خصيصًا لحساب الربط.
  • تمت أرشفة مترجم Jocaml في 2005-10-01 على Wayback Machine : مترجم لامتداد Objectif Caml تم إنشاؤه لاستخدام حساب الربط.

يعمل هذان المترجمان مع نفس النظام، وهو نظام آلي.

ليكن A(n) | B() = P(n) و A(n) | C() = Q(n) ;; 

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

في حساب الربط، تُعتبر الأسماء، كما في المثال A أو B أو C، هي القيم الأساسية. يُمثل المُترجمان هذه القيم بطريقتين. يستخدم مُترجم الربط متجهًا ذا خانتين، الأولى للاسم نفسه والثانية لقائمة انتظار الرسائل المُعلقة. أما Jocaml، فيستخدم الاسم كمؤشر على التعريفات. تُخزن هذه التعريفات مؤشرات أخرى للأسماء الأخرى مع حقل حالة وبنية تاريخ مُطابقة لكل رسالة. يكمن الاختلاف الأساسي في أنه عند تنفيذ عملية الحماية، يتحقق الأول مما إذا كانت جميع الأسماء هي الرسائل المُعلقة جاهزة، بينما يستخدم الثاني متغيرًا واحدًا فقط ويصل إلى المتغيرات الأخرى لمعرفة ما إذا كان النموذج قد اكتمل. [ 9 ]

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

التطبيقات والمكتبات

تُستخدم أنماط الربط (Join-patterns) في العديد من اللغات البرمجية المختلفة. تستخدم بعض اللغات أنماط الربط كأساس لتطبيقاتها، مثل Polyphonic C# أو MC# (مؤرشفة بتاريخ 10 سبتمبر 2011 على Wayback Machine). بينما تُدمج لغات أخرى أنماط الربط عبر مكتبة مثل Scala Joins [ 27 ] للغة Scala أو مكتبة Joins للغة VB [ 28 ] . علاوة على ذلك، تُستخدم أنماط الربط في بعض اللغات مثل Scheme لتطويرها [ 29 ] .

جيرلانغسي بيينضم إلى المكتبةدو دييز متعدد الأصواتلغة سي شارب المتوازيةانضمام سكالافا#مخططانضم إلى جافاهيومJoCaml
أنماط متطابقةنعمنعمنعمنعمنعمنعمنعمنعمنعمنعمنعمنعم
جدولة بين أنماط الربطنعم  : المباراة الأولىنعم  : الجولة الأولى/الدور الأولنعمنعمنعمنعمنعمنعملانعم  : عشوائينعم  : الجولة الأولى/الدور الأولنعم  : عشوائي
الأدوية الجنيسةنعمغير متوفرنعملاغير متوفرلانعمنعملالالالا
تجاوزلانعمغير متوفرغير متوفرغير متوفرنعمنعمنعملانعملالا

انضم إلى جافا

لغة Join Java [ 30 ] هي لغة مبنية على لغة برمجة Java، وتتيح استخدام حساب الربط. وهي تقدم ثلاثة بنيات لغوية جديدة:

  • تُعرَّف دوال الربط (Join) بجزأين أو أكثر من أجزاء الربط. تُنفَّذ دالة الربط بمجرد استدعاء جميع أجزاء نمط الربط. إذا كان نوع القيمة المُعادة نوعًا قياسيًا في جافا، فإن الجزء الأول سيمنع المُستدعي حتى يكتمل نمط الربط وتُنفَّذ الدالة. أما إذا كان نوع القيمة المُعادة إشارة، فسيعود الجزء الأول فورًا. جميع الأجزاء اللاحقة غير متزامنة، لذا لن تمنع المُستدعي.

مثال:

class JoinExample { int fragment1 () & fragment2 ( int x ) { // سيتم إرجاع قيمة x إلى مستدعي fragment1 return x ; } }
  • تُعرَّف الدوال غير المتزامنة باستخدام نوع الإرجاع للإشارة. يتميز هذا النوع بنفس خصائص النوع الفارغ (void)، باستثناء أن الدالة تُرجع القيمة فورًا. عند استدعاء دالة غير متزامنة، يتم إنشاء سلسلة عمليات جديدة لتنفيذ محتوى الدالة.

مثال:

class ThreadExample { signal thread ( SomeObject x ) { // سيتم تنفيذ هذا الكود في سلسلة عمليات جديدة } }
  • مُعدِّلات الترتيب

يمكن تكرار أجزاء الربط في أنماط ربط متعددة، لذا قد يحدث أن تُستكمل أنماط ربط متعددة عند استدعاء جزء منها. قد يحدث هذا في المثال أدناه: إذا تم استدعاء B() وC() وD()، فسيتم استدعاء A(). يُكمل الجزء الأخير A() ثلاثة من الأنماط، لذا توجد ثلاث طرق محتملة للاستدعاء. يُستخدم مُعدِّل الفئة المُرتَّب هنا لتحديد طريقة الربط التي سيتم استدعاؤها. الوضع الافتراضي، عند استخدام مُعدِّل الفئة غير المُرتَّب، هو اختيار إحدى الطرق عشوائيًا. أما مع مُعدِّل الفئة المُرتَّب، فتُعطى الأولوية للطرق وفقًا لترتيب تعريفها.

مثال:

class ordered SimpleJoinPattern { void A () & B () { } void A () & C () { } void A () & D () { } signal D () & E () { } }

أقرب لغة ذات صلة هي لغة C# متعددة الأصوات .

جيرلانغ

في لغة البرمجة إرلانج، لا تُعدّ المزامنة بين العمليات المتعددة أمرًا بسيطًا. لهذا السبب، تم إنشاء JErlang [ 31 ] ، وهي امتداد للغة إرلانج ، حيث يرمز الحرف J إلى "الضم". في الواقع، وللتغلب على هذا القيد، تم تطوير JErlang، وهي امتداد للغة إرلانج مستوحى من حساب الضم . من خصائص هذه اللغة:

  • تتيح عمليات الربط دلالات المطابقة الأولى وإمكانية وجود أنماط متعددة مع الحفاظ على ترتيب الرسائل.
العملية () -> استقبال { ok , sum } و { val , X } و { val , Y } -> { sum , X + Y }; { ok , mult } و { val , X } و { val , Y } -> { mult , X * Y }; { ok , sub } و { val , X } و { val , Y } -> { sub , X - Y }; نهاية نهاية
  • توفر الحماية ترشيحًا إضافيًا لا يعتمد على الأنماط. عدد محدود من التعبيرات بدون آثار جانبية
استقبل { المعاملة ، M } و { الحد ، الحد الأدنى ، الحد الأعلى } عندما ( الحد الأدنى <= M و M <= الحد الأعلى ) -> قم بتنفيذ المعاملة ( M ، المعاملة ) نهاية
  • باستخدام الأنماط غير الخطية ، يمكن للرسائل أن تتطابق مع عمليات ربط متعددة
استلام { get , X } و { set , X } -> { found , 2 , X } نهاية ... استلام { Pin , id } و { auth , Pin } و { commit , Id } -> تنفيذ المعاملة ( Pin , Id ) نهاية
  • تتيح خاصية الانتشار نسخ الرسائل الصحيحة بدلاً من إزالتها.
استقبل الخاصية ({ session , Id }) و { act , Action , Id } -> نفّذ_الإجراء ( Action , Id ); { session , Id } و { logout , Id } -> سجّل_خروج_المستخدم ( Id ) نهاية ... استقبل { Pin , id } و { auth , Pin } و { commit , Id } -> نفّذ_المعاملة ( Pin , Id ) نهاية
  • المكالمات المتزامنة
استقبل { قبول ، Pid1 } و { غير متزامن ، القيمة } و { قبول ، Pid2 } -> Pid1 ! { موافق ، القيمة Pid2 ! { موافق ، القيمة } نهاية

لغة سي++

قام ييغونغ ليو بكتابة بعض الفئات لنمط الربط بما في ذلك جميع الأدوات المفيدة مثل القنوات غير المتزامنة والمتزامنة، والأوتار ، وما إلى ذلك. ويبدو أنه تم دمجه في Boost، ولكنه لا يبدو موجودًا اعتبارًا من عام 2025.

استيراد std ؛template < typename V > class Buffer : public Joint { public : Async < V > put ; Synchronous < V , void > get ;Buffer () { chord ( get , put , & Buffer :: chordBody ); }V chordBody ( void_t g , V p ) { return p ; } };

يوضح هذا المثال مخزنًا مؤقتًا آمنًا للخيوط وقائمة انتظار للرسائل مع العمليات الأساسية للإضافة والاسترجاع. [ 32 ]

سي شارب

دو دييز متعدد الأصوات

لغة البرمجة C# متعددة الأصوات هي امتداد للغة البرمجة C#. وهي تقدم نموذج تزامن جديد مع طرق متزامنة وغير متزامنة (والتي تعيد التحكم إلى المستدعي) وأوتار (المعروفة أيضًا باسم "أنماط التزامن" أو "أنماط الربط").

public class Buffer { public String get () & public async put ( String s ) { return s ; } }

هذا مثال بسيط على المخزن المؤقت. [ 33 ]

MC#

MC# مؤرشف بتاريخ 2011-09-10 في Wayback Machine، اللغة هي نسخة معدلة من لغة Polyphonic C# لحالة الحسابات الموزعة المتزامنة.

public handler Get2 long () & channel c1 ( long x ) & channel c2 ( long y ) { return ( x + y ); }

يوضح هذا المثال استخدام الأوتار كأداة للمزامنة.

لغة سي شارب المتوازية

تعتمد لغة C# المتوازية على لغة C# متعددة الأصوات وتضيف بعض المفاهيم الجديدة مثل الطرق القابلة للنقل والدوال عالية الترتيب.

باستخدام النظام ؛class Test13 { int Receive () & async Send ( int x ) { return x * x ; }public static void Main ( string [] args ) { Test13 t = new Test13 (); t . Send ( 2 ); Console . WriteLine ( t . Receive ()); } }

يوضح هذا المثال كيفية استخدام عمليات الربط. [ 34 ]

يُضيف Cω ميزات لغوية جديدة لدعم البرمجة المتزامنة (استنادًا إلى Polyphonic C# السابقة ). مكتبة Joins Concurrency Library للغة C# ولغات .NET الأخرى مُشتقة من هذا المشروع. [ 35 ] [ 36 ]

أنماط الربط القابلة للتوسع

هي مكتبة أنماط ربط سهلة الاستخدام، تصريحية وقابلة للتوسع. على عكس مكتبة روسو [ 28 ] ، فهي لا تحتوي على قفل عام. في الواقع، تعمل مع نظام مقارنة وتبديل (CAS) ونظام رسائل ذري. تستخدم المكتبة [ 37 ] ثلاثة تحسينات لنمط الربط  :

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

JoCaml

تُعدّ JoCaml أول لغة تم فيها تطبيق نمط الربط. في الواقع، في البداية، تم تجميع جميع التطبيقات المختلفة باستخدام مُجمِّع JoCaml. لغة JoCaml هي امتداد للغة OCaml ، حيث تُضيف إليها دعمًا للتزامن والتزامن، والتنفيذ الموزع للبرامج، والنقل الديناميكي لأجزاء البرنامج النشطة أثناء التنفيذ. [ 38 ]

أنواع العملات المعدنية = نيكل | ديم والمشروبات = قهوة | شاي وأزرار = قهوة سوداء | شاي أسود | قسائم سوداء ;;(* يُعرّف def عبارة مجموعة نمط الربط * "&" على الجانب الأيسر من = تعني الربط (تزامن القنوات) * "&" على الجانب الأيمن تعني: عملية متوازية * synchronous_reply :== "reply" [x] "to" channel_name * القنوات المتزامنة لها أنواع شبيهة بالدوال (`a -> `b) * القنوات غير المتزامنة لها أنواع (`a Join.chan) * العبارة الأخيرة فقط في تعبير الجانب الأيمن من النمط يمكن أن تكون رسالة غير متزامنة * 0 في موضع رسالة غير متزامنة تعني STOP ("لم يتم إرسال رسالة" في مصطلحات CSP).  *)def put ( s ) = print_endlines s ; 0 (* STOP *) ;; (* put: string Join.chan *)def serve ( drink ) = match drink with Coffee -> put ( "Coffee" ) | Tea -> put ( "Tea" ) ;; (* serve: drinks Join.chan *)def refund ( v ) = let s = Printf.sprintf "Refund %d" v in put(s) ;; ( * refund : int Join.chan *)let new_vending serve refund = let vend ( cost : int ) ( credit : int ) = if credit >= cost then ( true , credit - cost ) else ( false , credit ) in def coin ( Nickel ) & value ( v ) = value ( v + 5 ) & reply () to coin or coin ( Dime ) & value ( v ) = value ( v + 10 ) & reply () to coinأو زر ( BCoffee ) & القيمة ( v ) = let should_serve , remainder = vend 10 v in ( if should_serve then serve ( Coffee ) else 0 (* STOP *) ) & القيمة ( remainder ) & reply () to buttonأو زر ( شاي ) & القيمة ( v ) = let should_serve , remainder = vend 5 v in ( if should_serve then serve ( Tea ) else 0 (* STOP *) ) & القيمة ( remainder ) & reply () to buttonأو زر ( إلغاء ) & القيمة ( v ) = استرداد ( v ) & القيمة ( 0 ) & الرد () على الزر في قيمة التوليد ( 0 ) ؛ عملة ، زر (* عملة، زر: عدد صحيح -> وحدة *) ;; (* بيع جديد: مشروب انضم.قناة -> عدد صحيح انضم.قناة -> (عدد صحيح -> وحدة)*(عدد صحيح -> وحدة) *)let ccoin , cbutton = new_vending serve refund in ccoin ( Nickel ); ccoin ( Nickel ); ccoin ( Dime ) ; Unix.sleep ( 1 ); cbutton ( BCoffee ) ; Unix.sleep ( 1 ); cbutton(BTea); Unix.sleep ( 1 ) ; cbutton ( BCancel ) ; Unix.sleep ( 1 ) ( * let the last message show up * ) ;;

أعطِ

قهوة شاي استرداد 5 

هيوم

Hume [ 39 ] هي لغة وظيفية صارمة ذات كتابة قوية لمنصات ذات موارد محدودة، مع التزامن القائم على تمرير الرسائل غير المتزامن، وبرمجة تدفق البيانات ، وبنية تشبه Haskell .

لا يوفر برنامج Hume خدمة المراسلة المتزامنة.

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

يجب أن يتوافق كل نمط ربط في المجموعة مع نوع مجموعة إدخال الصندوق الذي يحدد '*' للقنوات غير المطلوبة، مما يعطي تعبيرًا يتوافق نوعه مع مجموعة الإخراج، ويشير إلى المخرجات غير المغذية بعلامة '*'.

ينص بند خاص بالنقل عبر الإنترنت على

  1. مجموعة من أصول أو مصادر الإدخال المتطابقة وقيم البداية (اختيارية).
  2. مجموعة من وجهات الإخراج، وهي عبارة عن قنوات أو مصارف (stdout، ..).

يمكن للمربع تحديد معالجات الاستثناءات باستخدام تعبيرات تتوافق مع مجموعة الإخراج.

بيانات العملات المعدنية = نيكل | دايم ؛ بيانات المشروبات = قهوة | شاي ؛ بيانات الأزرار = BCoffee | BTea | BCancel ؛نوع Int = int 32 ؛ نوع String = string ؛ عرض u = u كسلسلة نصية ؛إدخال قهوة من العلبة ( عملة :: عملات معدنية ، زر :: أزرار ، قيمة :: عدد صحيح ) -- قنوات الإدخال ، إخراج ( مخرج_المشروب :: سلسلة نصية ، قيمة :: عدد صحيح ، مخرج_الاسترداد :: سلسلة نصية ) -- مخرجات مُسماةتطابق -- * أحرف بدل للمخرجات غير المعبأة، والمدخلات غير المستهلكة ( Nickel , * , v ) -> ( * , v + 5 , * ) | ( Dime , * , v ) -> ( * , v + 10 , * ) | ( * , BCoffee , v ) -> بيع قهوة 10 v | ( * , BTea , v ) -> بيع شاي 5 v | ( * , BCancel , v ) -> دع الاسترداد u = "استرداد" ++ عرض u ++ " \n " في ( * , 0 , استرداد v ) ؛بيع المشروب تكلفة الرصيد = إذا كان الرصيد >= التكلفة ثم ( تقديم المشروب ، الرصيد - التكلفة ، * ) وإلا ( * ، الرصيد ، * );تقديم المشروب = حالة مشروب القهوة -> "قهوة \ n " الشاي -> "شاي \n " ;box control in ( c :: char ) out ( coin :: Coins , button :: Buttons ) match 'n' -> ( Nickel , * ) | 'd' -> ( Dime , * ) | 'c' -> ( * , BCoffee ) | 't' -> ( * , BTea ) | 'x' -> ( * , BCancel ) | _ -> ( * , * ) ;قم بتحويل مخرج وحدة التحكم إلى "std_out" ؛ وقم بتحويل مدخل وحدة التحكم من "std_in" ؛-- توصيل تدفق البياناتwire cofee -- المدخلات (أصول القناة) ( control . coin , control . button , coffee . value ' initialy 0 ) -- وجهات الإخراج ( console_outp , coffee . value , console_outp ) ;التحكم السلكي ( console_inp ) ( coffee.coin , coffee.button ) ;

فيجوال بيسك

أساسيات التزامن - CB

يُقدّم امتدادٌ للغة Visual Basic 9.0، يُسمى Concurrent Basic (اختصارًا CB)، أنماط الربط، مع توفير بنى التزامن غير المتزامن. يعتمد CB (المبني على أعمال سابقة في Polyphonic C# وCω ومكتبة Joins) على بنية بسيطة شبيهة بالأحداث، مألوفة لمبرمجي VB، ويتيح تعريف تجريدات تزامن عامة، ويوفر دعمًا أكثر سلاسة للوراثة، مما يُمكّن الفئة الفرعية من توسيع مجموعة الأنماط. يمكن لفئة CB تعريف دالة للتنفيذ عند حدوث اتصال على مجموعة معينة من القنوات المحلية، سواءً كانت متزامنة أو غير متزامنة، لتشكيل نمط ربط. [ 28 ]

مخزن الوحدةدالة عامة غير متزامنة Put ( ByVal s As String ) دالة عامة متزامنة Take () As Stringدالة خاصة CaseTakeAndPut ( ByVal s As String ) As String _ عند الأخذ ، الإضافة ، إرجاع s نهاية الدالةوحدة النهاية

يوضح هذا المثال جميع الكلمات الرئيسية الجديدة التي تستخدمها لغة Concurrent Basic: Asynchronous و Synchronous و When. [ 40 ]

مكتبة الربط (C# و VB)

تُقدّم هذه المكتبة تجريدات عالية المستوى لنمط الربط باستخدام الكائنات والأنواع العامة. القنوات هي قيم تفويض خاصة من كائن ربط مشترك (بدلاً من الأساليب). [ 41 ]

باستخدام Microsoft.Research.Joins ؛class Buffer { public readonly Asynchronous.Channel <string> Put ; public readonly Synchronous <string> .Channel Get ; }public Buffer ( ) { Join join = Join.Create ( ) ; join.Initialize ( out Put ) ; join.Initialize ( out Get ) ; join.When ( Get ) .And ( Put ) .Do ( delegate ( string s ) { return s ; } ) ; } }

يوضح هذا المثال كيفية استخدام أساليب كائن Join. [ 42 ]

سكالا

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

في لغة سكالا، من الممكن حل العديد من المشاكل باستخدام مطابقة الأنماط وعمليات الربط في سكالا، على سبيل المثال، قارئ-كاتب. [ 27 ]

class ReaderWriterLock extends Joins {private val Sharing = new AsyncEvent [ Int ] val Exclusive , ReleaseExclusive = new NullarySyncEvent val Shared , ReleaseShared = new NullarySyncEvent join { case Exclusive () & Sharing ( 0 ) => Exclusive reply case ReleaseExclusive () => { Sharing ( 0 ); ReleaseExclusive reply } case Shared () & Sharing ( n ) => { Sharing ( n + 1 ); Shared reply } case ReleaseShared () & Sharing ( 1 ) => { Sharing ( 0 ); ReleaseShared reply } case ReleaseShared () & Sharing ( n ) => { Sharing ( n - 1 ); ReleaseShared reply } } Sharing ( 0 ) }

في الصنف، نُعلن عن الأحداث في حقول عادية. لذا، يُمكن استخدام بنية الربط (Join) لتمكين مطابقة الأنماط عبر قائمة من تعريفات الحالات. تُمثَّل هذه القائمة بـ =>، حيث يُمثل كل جانب جزءًا من التعريف. الجانب الأيسر هو نموذج لنمط الربط (Join) لعرض دمج الأحداث المتزامنة وغير المتزامنة، بينما الجانب الأيمن هو جسم الربط (Join) الذي يُنفَّذ عند اكتمال نموذج الربط.

في لغة سكالا، من الممكن أيضًا استخدام مكتبة الممثلين الخاصة بها [ 43 ] مع نمط الربط. على سبيل المثال، مخزن مؤقت غير محدود: [ 27 ]

val Put = new Join1 [ Int ] val Get = new Join class Buffer extends JoinActor { def act () { receive { case Get () & Put ( x ) => Get reply x } } }

Scala Join و Chymyst هما تطبيقان أحدث لنمط الربط، وهما يحسّنان من Scala Joins للدكتور فيليب هالر .

هاسكل

لغة الربط هي تطبيق لنمط الربط في لغة هاسكل.

مخطط

تتيح أنماط الربط نوعًا جديدًا من البرمجة، خاصةً للبنى متعددة النوى المتوفرة في العديد من تطبيقات البرمجة، مع مستويات عالية من التجريد. ويعتمد هذا على الحماية والانتشار. وقد تم تطبيق مثال على هذا الابتكار في لغة Scheme. [ 29 ]

تُعدّ الحواجز ضرورية لضمان تحديث/استرجاع البيانات التي تتطابق مع المفتاح فقط. يمكن لعملية النشر إلغاء عنصر، وقراءة محتوياته، وإعادته إلى المخزن. بالطبع، يبقى العنصر في المخزن أثناء القراءة. تُعبّر الحواجز باستخدام متغيرات مشتركة. ومن هنا، تكمن الجدة في أن نمط الربط يمكن أن يحتوي الآن على أجزاء منتشرة ومبسطة. ففي لغة Scheme، يُنشر الجزء الذي يسبق / ويُحذف الجزء الذي يليه. يُستخدم نمط الربط القائم على الهدف لتقسيم العمل إلى مهام متعددة، ثم يجمع جميع النتائج في النهاية باستخدام نمط الربط. وقد طُبّق نظام يُسمى "MiniJoin" لاستخدام النتيجة الوسيطة لحل المهام الأخرى إن أمكن. وإذا لم يكن ذلك ممكنًا، فإنه ينتظر حل المهام الأخرى ليحل نفسه. لذا، فإن تطبيق نمط الربط المتزامن الذي يُنفّذ بالتوازي على بنية متعددة النوى لا يضمن أن التنفيذ المتوازي سيؤدي إلى تعارضات. لضمان ذلك ودرجة عالية من التوازي، تُستخدم ذاكرة معاملات برمجية (STM) ضمن بنية بيانات متزامنة عالية الأداء تعتمد على المقارنة والتبديل الذري (CAS). يتيح ذلك تشغيل العديد من العمليات المتزامنة بالتوازي على بنية متعددة النوى. علاوة على ذلك، يُستخدم التنفيذ الذري لمنع "التعارض الزائف" بين CAS وSTM. [ 29 ]

أنماط تصميم أخرى مماثلة

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

  • نمط التسلسل  : يتكون من انتظار اكتمال مهمة ما قبل الانتقال إلى مهمة أخرى (التنفيذ الكلاسيكي). [ 44 ]
  • نمط التقسيم ( التقسيم المتوازي )  : تنفيذ عدة مهام بالتوازي في نفس الوقت (مثل MapReduce ). [ 45 ]

انظر أيضاً

  • Joins (مكتبة التزامن) - Joins هي واجهة برمجة تطبيقات للحوسبة المتزامنة غير المتزامنة من Microsoft Research لإطار عمل .NET.
  • حساب الربط - تم تطوير حساب الربط لتوفير أساس رسمي لتصميم لغات البرمجة الموزعة.
  • نموذج الممثل - بديل آخر للخيوط يستخدم تمرير الرسائل

مراجع

ملحوظات

  1. تارال دراغون (25 أكتوبر 2009). "انضم إلى حساب التفاضل والتكامل" .
  2. روسو، كلاوديو ف. (23 أكتوبر 2008). "أنماط الربط في فيجوال بيسك". إشعارات ACM SIGPLAN . 43 (10): 10. doi : 10.1145/1449955.1449770 .
  3. "لغة سي شارب المتوازية" .
  4. روسو، كلاوديو ف. (27 أكتوبر 2008). "أنماط الربط في فيجوال بيسك". إشعارات ACM SIGPLAN . 43 (10): 2. doi : 10.1145/1449955.1449770 .
  5. فورنيه، سيدريك؛ غونتييه، جورج (2002). "حساب الربط: لغة لبرمجة الأجهزة المحمولة الموزعة". الدلالات التطبيقية . سلسلة محاضرات في علوم الحاسوب. المجلد 2395. سبرينغر. الصفحات 268-332 . CiteSeerX 10.1.1.4.4788 . doi : 10.1007/3-540-45699-6_6 . ISBN    978-3-540-44044-4.
  6. 1 2 3 4 5 6 روسو، كلاوديو ف. (27 أكتوبر 2008). "أنماط الربط في فيجوال بيسك". إشعارات ACM SIGPLAN . 43 (10): 53-72 . doi : 10.1145/1449955.1449770 .
  7. روسو، كلاوديو ف. (23 أكتوبر 2008). "أنماط الربط في فيجوال بيسك". إشعارات ACM SIGPLAN . 43 (10): 5. doi : 10.1145/1449955.1449770 .
  8. روسو، كلاوديو ف. (23 أكتوبر 2008). "أنماط الربط في فيجوال بيسك". إشعارات ACM SIGPLAN . 43 (10): 18. doi : 10.1145/1449955.1449770 .
  9. 1 2 3 مارانجيت، لوك؛ لو فيسان ، فابريس (25 سبتمبر 2007). "تجميع أنماط الانضمام" . لو تشيسناي فرنسا.
  10. ^ فورنيه، سيدريك. جونتييه، جورج. ليفي، جان جاك؛ مارانجيت، لوك (1996). “حساب التفاضل والتكامل للوكلاء المتنقلين”. CONCUR '96: نظرية التزامن . ملاحظات محاضرة في علوم الكمبيوتر. المجلد. 1119. لو تشيسناي: نظرية التزامن. ص 406 – 421. دوى : 10.1007 / 3-540-61604-7_67 . رقم ISBN   978-3-540-61604-7.
  11. فورنيه، سيدريك؛ لو فيسان، فابريس؛ مارانجيه، لوك؛ شميت، أ. (2003). "JoCaml: لغة للبرمجة المتزامنة والموزعة والمتنقلة". البرمجة الوظيفية المتقدمة . سلسلة محاضرات في علوم الحاسوب. المجلد 2638. الصفحات 129-158 . doi : 10.1007/978-3-540-44833-4_5 . ISBN   978-3-540-40132-2.
  12. كونشون، س.؛ لو فيسان، ف. (1999). "Jocaml: وكلاء متنقلون للغة Objective-Caml". وقائع الندوة الدولية الأولى والثالثة حول تطبيقات أنظمة الوكلاء والوكلاء المتنقلين . الصفحات 22-29 . doi : 10.1109/ASAMA.1999.805390 . ISBN  0-7695-0342-X. S2CID 14355301 . 
  13. أوديرسكي، مارتن (سبتمبر 2000). "نظرة عامة على الشبكات الوظيفية". المدرسة الصيفية، كامينها، البرتغال، سبتمبر 2000. 2395 .
  14. أوديرسكي، مارتن (2000). "الشبكات الوظيفية". لغات البرمجة والأنظمة . سلسلة محاضرات في علوم الحاسوب. المجلد 1782. الصفحات 1-25 . doi : 10.1007/3-540-46425-5_1 . ISBN   978-3-540-67262-3.
  15. إيتزستين، جي إس؛ كيرني، دي. (2001). "انضمام جافا: دلالات التزامن البديلة لجافا". تقرير فني ACRC-01-001، جامعة جنوب أستراليا .
  16. بنتون، نيك؛ كارديلي، لوكا؛ فورنيه، سيدريك (2002). "مفاهيم التزامن الحديثة للغة سي شارب". ECOOP 2002 - البرمجة كائنية التوجه . سلسلة محاضرات في علوم الحاسوب. المجلد 2374. الصفحات 415-440 . doi : 10.1007/3-540-47993-7_18 . ISBN   978-3-540-43759-8.
  17. بنتون، ن.؛ كارديلي، ل. (2004). تجريدات التزامن الحديثة للغة سي شارب. معاملات ACM في لغات البرمجة والأنظمة . المجلد 26. 
  18. فان هام، يورغن م.؛ سالفانيسكي، غيدو؛ ميزيني، ميرا؛ نوي، جاك (22 أبريل 2014). "JEScala: التنسيق المعياري باستخدام الأحداث والوصلات التصريحية" . وقائع المؤتمر الدولي الثالث عشر حول المعيارية . المعيارية '14. نيويورك، نيويورك، الولايات المتحدة الأمريكية: رابطة آلات الحوسبة. الصفحات 205-216 . doi : 10.1145/2577080.2577082 . ISBN  978-1-4503-2772-5.
  19. سينغ، ساتنام (6 يناير 2007). "المُركِّبات ذات الرتبة العليا لأنماط الربط باستخدام STM" . ص 1. 
  20. 1 2 آرون، تورون؛ روسو، كلاوديو ف. (27 أكتوبر 2011). أنماط الربط القابلة للتوسع (ملف PDF) . نيويورك: رابطة آلات الحوسبة. ص 4. ISBN  978-1-4503-0940-0.
  21. آرون، تورون؛ روسو، كلاوديو ف. (27 أكتوبر 2011). أنماط الربط القابلة للتوسع (ملف PDF) . نيويورك: رابطة آلات الحوسبة. ص 1. ISBN  978-1-4503-0940-0.
  22. 1 2 آرون، تورون؛ روسو، كلاوديو ف. (27 أكتوبر 2011). أنماط الربط القابلة للتوسع (ملف PDF) . نيويورك: رابطة آلات الحوسبة. ص 3. ISBN  978-1-4503-0940-0.
  23. آرون، تورون؛ روسو، كلاوديو ف. (27 أكتوبر 2011). أنماط الربط القابلة للتوسع (ملف PDF) . نيويورك: رابطة آلات الحوسبة. ص 2. ISBN  978-1-4503-0940-0.
  24. 1 2 3 فورنيه، سيدريك؛ جونتييه، جورج. ليفي، جان جاك؛ مارانجيت، لوك. ريمي، ديدييه (1996). “حساب التفاضل والتكامل للوكلاء المتنقلين”. CONCUR '96: نظرية التزامن . ملاحظات محاضرة في علوم الكمبيوتر. المجلد. 1119. لو تشيسناي: نظرية التزامن. ص 406 – 421. دوى : 10.1007 / 3-540-61604-7_67 . رقم ISBN   978-3-540-61604-7.
  25. مالودزينسكي، سلاومير؛ دوبروفولسكي، غريغورز (2007). "بيئة الوكيل والمعرفة في حساب الربط الموزع". أنظمة وتطبيقات متعددة الوكلاء، المجلد الخامس . سلسلة محاضرات في علوم الحاسوب. المجلد 4696. الصفحات 298-300 . doi : 10.1007/978-3-540-75254-7_30 . ISBN   978-3-540-75253-0.
  26. ما، تشين؛ مارانجيه، لوك (5 أبريل 2004). "تجميع مطابقة الأنماط في أنماط الربط". مؤتمر CONCUR 2004 - نظرية التزامن . سلسلة محاضرات في علوم الحاسوب. المجلد 3170. INRIA. الصفحات 417-431 . CiteSeerX 10.1.1.499.8443 . doi : 10.1007/978-3-540-28644-8_27 . ISBN    978-3-540-22940-7. S2CID 9956643 . 
  27. 1 2 3 هالر، فيليب؛ فان كوتسم، توم (2008). "تنفيذ عمليات الربط باستخدام مطابقة الأنماط القابلة للتوسيع". نماذج التنسيق واللغات . سلسلة محاضرات في علوم الحاسوب. المجلد 5052. لوزان: نماذج التنسيق واللغات. الصفحات 135-152 . CiteSeerX 10.1.1.210.1242 . doi : 10.1007/978-3-540-68265-3_9 . ISBN    978-3-540-68264-6.
  28. 1 2 3 روسو، كلاوديو ف. (23 أكتوبر 2008). "أنماط الربط في فيجوال بيسك". إشعارات ACM SIGPLAN . 43 (10): 53-72 . doi : 10.1145/1449955.1449770 .
  29. 1 2 3 سولزمان، مارتن؛ إس إل لام، إدموند. "أنماط وصل متوازية مع حواجز وانتشار" . الدنمارك.
  30. فون إيتزستين، جي. ستيوارت؛ كيرني، ديفيد (2002). تطبيقات دمج جافا . وقائع المؤتمر السابع لهندسة أنظمة الحاسوب في منطقة آسيا والمحيط الهادئ ACSAC'2002. ملبورن، أستراليا، الجمعية الأسترالية للحاسوب: 1-20: ACS.{{cite book}}: CS1 maint: location ( link )
  31. بلوتشينيكزاك، هوبرت؛ آيزنباخ، سوزان (2010). "JErlang: Erlang with Joins". نماذج ولغات التنسيق . سلسلة محاضرات في علوم الحاسوب. المجلد 6116. سبرينغر. الصفحات 61-75 . Bibcode : 2010LNCS.6116...61P . doi : 10.1007/978-3-642-13414-2_5 . ISBN   978-3-642-13413-5.
  32. ليو، ييغونغ (2007-2009). "Join - مكتبة تنسيق الرسائل غير المتزامنة والتزامن" .
  33. "مقدمة إلى C# متعدد الأصوات" .
  34. "لغة سي شارب المتوازية" . مؤرشف من الأصل بتاريخ 26-11-2013.
  35. هانوس، مايكل (يناير 2007). مكتبة التزامن Joins . المجلد 4354. سبرينغر. ISBN  978-3-540-69608-7.
  36. "كوميغا" .
  37. آرون، تورون؛ روسو، كلاوديو ف. (27 أكتوبر 2011). أنماط الربط القابلة للتوسع (ملف PDF) . نيويورك: رابطة آلات الحوسبة. ISBN 978-1-4503-0940-0.
  38. فورنيه، سيدريك؛ لو فيسان، فابريس؛ مارانجيه، لوك؛ شميت، آلان (2003). "JoCaml: لغة للبرمجة المتزامنة والموزعة والمتنقلة" (ملف PDF) . البرمجة الوظيفية المتقدمة . سلسلة محاضرات في علوم الحاسوب. سبرينغر-فيرلاغ. الصفحات 129-158 . 
  39. هاموند/مايكلسون/صن – برمجة الأنظمة التفاعلية في هيوم
  40. "الأساس المتزامن" . مؤرشف من الأصل بتاريخ 25-04-2015.
  41. روسيو، كلاوديو (2006). "مكتبة التزامن Joins". الجوانب العملية للغات التصريحية . سلسلة محاضرات في علوم الحاسوب. المجلد 4354. كامبريدج: الجوانب العملية للغات التصريحية. الصفحات 260-274 . CiteSeerX 10.1.1.187.8792 . doi : 10.1007/978-3-540-69611-7_17 . ISBN    978-3-540-69608-7.
  42. "مكتبة التزامن Joins" .
  43. هالر، فيليب؛ أوديرسكي، مارتن (يونيو 2007). "الجهات الفاعلة التي توحد الخيوط والأحداث" . نماذج ولغات التنسيق . سلسلة محاضرات في علوم الحاسوب. المجلد 4467. سبرينغر. الصفحات 171-190 . doi : 10.1007/978-3-540-72794-1_10 . ISBN   978-3-540-72793-4.
  44. ^ السيد جيرت (2010)، التنسيق القائم على الأنماط في تركيبات الخدمة القائمة على العمليات ، لوفين بلجيكا: جامعة كاثوليك لوفين، ص. 68 
  45. ^ السيد جيرت (2010)، التنسيق القائم على الأنماط في تركيبات الخدمة القائمة على العمليات ، لوفين بلجيكا: جامعة كاثوليك لوفين، ص. 70