تمرير الرسائل

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

يمكن تنفيذ تمرير الرسائل من خلال آليات مختلفة، بما في ذلك القنوات . يُعد تمرير الرسائل أسلوبًا شائع الاستخدام في برامج الحاسوب الحديثة.  ويُستخدم كطريقة لتمكين الكائنات التي تشكل برنامجًا من التفاعل فيما بينها، وكذلك كوسيلة للتواصل بين الكائنات والأنظمة العاملة على أجهزة حاسوب مختلفة (مثل الإنترنت). يمكن تنفيذ تمرير الرسائل عبر آليات متنوعة، بما في ذلك القنوات. &#x5B; *[[ويكيبيديا:بحاجة لمصدر|<span title="This claim needs references to reliable sources. (April 2021)">بحاجة لمصدر</span>]]* &#x5D;

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

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

وكان أحد الأمثلة الأولى لكيفية استخدام ذلك في مجال الرسوميات الحاسوبية. هناك تعقيدات مختلفة تشارك في التعامل مع الكائنات الرسومية. على سبيل المثال، فإن استخدام الصيغة الصحيحة لحساب مساحة الشكل المحاط سوف يختلف اعتمادًا على ما إذا كان الشكل مثلثًا أو مستطيلًا أو قطعًا ناقصًا أو دائرة. في البرمجة الحاسوبية التقليدية، سيؤدي هذا إلى إنشاء عبارات IF-THEN طويلة لاختبار نوع الكائن الذي كان عليه الشكل واستدعاء الكود المناسب.في البرمجة الشيئية، يتم التعامل مع هذه المسألة من خلال تعريف فئة أساسية باسم Shape وفئات فرعية مشتقة منها مثل Rectangle و Ellipse (والتي بدورها قد تحتوي على فئات فرعية مثل Square و Circle). بعد ذلك، يتم ببساطة إرسال رسالة إلى أي كائن من نوع Shape لطلب حساب مساحته. وسيقوم كل كائن Shape بتنفيذ الطريقة الخاصة بفئته الفرعية باستخدام الصيغة المناسبة لنوعه. 

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

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

## تمرير الرسائل المتزامن مقابل تمرير الرسائل غير المتزامن

### تمرير الرسائل المتزامنة
يحدث تمرير الرسائل المتزامن بين الكائنات التي تعمل في نفس اللحظة الزمنية.

يتم استخدامه بواسطة لغات البرمجة الموجهة للكائنات مثل Java وSmalltalk .

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

تصور بيئة عمل صاخبة تضم مئة جهاز حاسوب مكتبي يتراسلون عبر البريد الإلكتروني فيما بينهم باستخدام أسلوب تمرير الرسائل المتزامن بشكل حصري. قد يؤدي إيقاف تشغيل أحد العاملين لجهاز الكمبيوتر الخاص به إلى تجميد أجهزة الكمبيوتر الـ99 الأخرى حتى يقوم العامل بتشغيل جهاز الكمبيوتر الخاص به مرة أخرى لمعالجة بريد إلكتروني واحد.

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

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

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

### هجينة
يمكن تحقيق اتصال المزامن بالاعتماد على اتصال غير متزامن باستخدام آلية تزامن. على سبيل المثال، يضمن نظام α-Synchronizer أن ينتظر المرسل دائمًا رسالة تأكيد من المستقبل قبل إرسال الرسالة التالية. بمعنى آخر، لا يرسل المرسل الرسالة اللاحقة إلا بعد استلام إقرار بوصول الرسالة السابقة.

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

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

من أمثلة الأنظمة التي تدعم الكائنات الموزعة: Emerald ، و ONC RPC ، وCORBA ، و Java RMI ، وDCOM ، و SOAP ،. NET Remoting و CTOS و QNX Neutrino RTOS و OpenBinder و D-Bus يعود سبب تسمية أنظمة الكائنات الموزعة بأنظمة "لا شيء مشترك" إلى أن طبقة التجريد التي يوفرها تمرير الرسائل تحجب التعديلات الجوهرية في الحالة التي قد تُستغل في عملية تنفيذ إرسال الرسائل.

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

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

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

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

.

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

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

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

## أمثلة

* تنفيذ نموذج الممثل
* الحوسبة غير المتبلورة
* التواصل بشأن العمليات المتسلسلة
* البرمجة القائمة على التدفق
* صابون

## انظر أيضا

* رسالة نشطة
* الحوسبة الموزعة
* حلقة الحدث
* نمط المراسلة
* تمرير الرسائل في مجموعات الكمبيوتر
* واجهة تمرير الرسائل
* الآلة الافتراضية المتوازية (PVM)
* لغات البرمجة التي تتضمن تمرير الرسائل كميزة مركزية:
** أبل سكريبت
** إرلانج
** إكسير
** هايبر كارد ، لايف كود
** يذهب
** Objective-C
** الصدأ 
** سكالا
** حديث صغير
** الذات
** التعلم الآلي المتزامن

## مراجع

## قراءة إضافية

* 
* 
* 
* 

## روابط خارجية

* تاريخ حزمة تمرير الرسائل
تصنيف:اتصال بين العمليات
تصنيف:معمارية الحوسبة الموزعة