تمرير الرسائل
في علوم الحاسوب ، يُعدّ تمرير الرسائل أسلوبًا لاستدعاء سلوكٍ ما (أي تشغيل برنامج ) على الحاسوب . يرسل البرنامج المُستدعي رسالةً إلى عمليةٍ ما (قد تكون فاعلًا أو كائنًا )، ويعتمد على تلك العملية وبنيتها التحتية الداعمة لاختيار وتنفيذ جزءٍ مناسبٍ من التعليمات البرمجية. يختلف تمرير الرسائل عن البرمجة التقليدية حيث يتم استدعاء العملية أو الروتين الفرعي أو الدالة مباشرةً بالاسم. يُعدّ تمرير الرسائل عنصرًا أساسيًا في بعض نماذج التزامن والبرمجة كائنية التوجه .
يُعدّ تبادل الرسائل شائعًا في برامج الحاسوب الحديثة . فهو يُستخدم كوسيلة لتفاعل مكونات البرنامج فيما بينها، وكوسيلة لتفاعل الكائنات والأنظمة العاملة على أجهزة حاسوب مختلفة (مثل الإنترنت ) . ويمكن تنفيذ تبادل الرسائل عبر آليات متنوعة، بما في ذلك القنوات .
ملخص
تمرير الرسائل هو أسلوب لاستدعاء سلوك معين (أي تشغيل برنامج) على الحاسوب. على عكس الأسلوب التقليدي لاستدعاء البرنامج بالاسم، يستخدم تمرير الرسائل نموذجًا كائنيًا لتمييز الوظيفة العامة عن التطبيقات المحددة. يرسل البرنامج المستدعي رسالة ويعتمد على الكائن لاختيار وتنفيذ الكود المناسب. تندرج مبررات استخدام طبقة وسيطة ضمن فئتين رئيسيتين: التغليف والتوزيع.
يُعدّ تمرير الرسائل تقنية أساسية تُستخدم للتواصل بين العمليات، والخيوط، والكائنات، أو العُقد في الأنظمة المتزامنة والموزعة على حدٍ سواء. فهو يُمكّن مكونات البرمجيات من تبادل المعلومات دون مشاركة الذاكرة، وغالبًا ما يستخدم قنوات اتصال، أو مخازن مؤقتة، أو برمجيات وسيطة لنقل الرسائل بين المُرسِلين والمُستقبِلين. في بعض النماذج، يُمكن تنفيذ تمرير الرسائل بشكل متزامن، حيث ينتظر المُرسِل الرد، أو بشكل غير متزامن، حيث تُوضع الرسائل في قائمة انتظار للمعالجة لاحقًا. [ 1 ]
التغليف هو مفهوم يُمكّن الكائنات البرمجية من استدعاء الخدمات على كائنات أخرى دون معرفة أو الاهتمام بكيفية تنفيذ تلك الخدمات. يُقلل التغليف من حجم منطق البرمجة ويجعل الأنظمة أكثر قابلية للصيانة. على سبيل المثال، بدلاً من استخدام عبارات "إذا-ثم" لتحديد الروتين الفرعي أو الدالة التي يجب استدعاؤها، يُمكن للمطور ببساطة إرسال رسالة إلى الكائن، وسيقوم الكائن باختيار الكود المناسب بناءً على نوعه.
كان أحد الأمثلة الأولى على كيفية استخدام هذا الأسلوب في مجال رسومات الحاسوب. ينطوي التعامل مع الكائنات الرسومية على تعقيدات عديدة. فعلى سبيل المثال، يختلف استخدام الصيغة الصحيحة لحساب مساحة شكل مغلق باختلاف نوع الشكل، سواء كان مثلثًا أو مستطيلًا أو قطعًا ناقصًا أو دائرة. في البرمجة الحاسوبية التقليدية، كان هذا يستلزم استخدام عبارات شرطية طويلة (IF-THEN) لاختبار نوع الكائن واستدعاء الكود المناسب. أما في البرمجة الكائنية، فيتم تعريف فئة تُسمى `a` Shapeمع فئات فرعية مثل ` Rectanglea` و`a` Ellipse(والتي بدورها تحتوي على فئات فرعية مثل `a` Squareو`a` Circle)، ثم إرسال رسالة إلى أي كائن Shape`a` لطلب حساب مساحته. Shapeبعد ذلك، يستدعي كل كائن `a` دالة الفئة الفرعية باستخدام الصيغة المناسبة لنوعه. [ 2 ]
توفر آلية تبادل الرسائل الموزعة للمطورين طبقةً من بنية النظام تُقدم خدمات مشتركة لبناء أنظمة تتكون من أنظمة فرعية تعمل على أجهزة حاسوب متباينة في مواقع وأوقات مختلفة. عندما يرسل كائن موزع رسالة، يمكن لطبقة المراسلة معالجة مسائل مثل:
- إيجاد العملية باستخدام أنظمة تشغيل ولغات برمجة مختلفة، في مواقع مختلفة عن موقع منشأ الرسالة.
- يتم حفظ الرسالة في قائمة انتظار إذا لم يكن الكائن المناسب لمعالجتها قيد التشغيل حاليًا، ثم يتم استدعاء الرسالة عندما يصبح الكائن متاحًا. كما يتم تخزين النتيجة، إذا لزم الأمر، إلى حين أن يكون الكائن المُرسِل جاهزًا لاستقبالها.
- التحكم في متطلبات المعاملات المختلفة للمعاملات الموزعة، مثل الذرية والاتساق والعزل والمتانة ( اختبار ACID ) للبيانات . [ 3 ]
تمرير الرسائل المتزامن مقابل تمرير الرسائل غير المتزامن
تمرير الرسائل المتزامنة
يحدث تبادل الرسائل المتزامن بين الكائنات التي تعمل في نفس الوقت. ويُستخدم هذا الأسلوب في لغات البرمجة كائنية التوجه مثل جافا وسمول توك .
تُشبه المراسلة المتزامنة استدعاء دالة متزامنة؛ فكما ينتظر مُستدعي الدالة حتى اكتمالها، ينتظر المُرسِل حتى يستقبل المُستقبِل الرسالة. [ 4 ] قد يجعل هذا الاتصال المتزامن غير عملي لبعض التطبيقات. على سبيل المثال، قد لا تعمل الأنظمة الموزعة الكبيرة بكفاءة كافية لتكون قابلة للاستخدام. قد تحتاج هذه الأنظمة إلى العمل أثناء توقف بعض أنظمتها الفرعية للصيانة، وما إلى ذلك.
تخيل مكتبًا تجاريًا مزدحمًا يضم 100 جهاز كمبيوتر مكتبي تتبادل رسائل البريد الإلكتروني فيما بينها باستخدام بروتوكول تبادل الرسائل المتزامن فقط. قد يؤدي إيقاف تشغيل أحد الموظفين لجهازه إلى توقف عمل الأجهزة التسعة والتسعين الأخرى حتى يقوم الموظف بتشغيل جهازه مرة أخرى لمعالجة رسالة بريد إلكتروني واحدة.
تمرير الرسائل غير المتزامن
يمكن تصنيف أنظمة تمرير الرسائل بشكل عام بناءً على كيفية تفاعل عمليات الإرسال والاستقبال مع العمليات الجارية. في تمرير الرسائل المتزامن ، قد تتوقف عملية الإرسال مؤقتًا حتى يقبل المُستقبِل الرسالة، مما يضمن تنسيقًا دقيقًا. أما في النماذج غير المتزامنة ، فيستمر المُرسِل في التنفيذ بعد إرسال الرسالة، وعادةً ما تُخزَّن الرسائل في قائمة انتظار أو مخزن مؤقت حتى تسترجعها عملية الاستقبال. [ 5 ]
في تمرير الرسائل غير المتزامن، قد يكون الكائن المُستقبِل مُعطَّلاً أو مشغولاً عندما يُرسل الكائن الطالب الرسالة. وبالعودة إلى تشبيه استدعاء الدالة، يُشبه الأمر استدعاء دالة تُعيد النتيجة فورًا، دون انتظار اكتمال الدالة المُستدعاة. تُرسَل الرسائل إلى قائمة انتظار حيث تُخزَّن إلى أن يطلبها المُستقبِل. يُعالِج المُستقبِل رسائله ويُرسِل النتائج إلى قائمة انتظار ليتم استلامها من قِبَل العملية الأصلية (أو عملية تالية مُحدَّدة). [ 6 ]
تتطلب المراسلة غير المتزامنة قدرات إضافية لتخزين وإعادة إرسال البيانات للأنظمة التي قد لا تعمل بشكل متزامن، ويتم التعامل معها بشكل عام بواسطة مستوى وسيط من البرامج (يطلق عليه غالبًا اسم البرامج الوسيطة )؛ ومن الأنواع الشائعة البرامج الوسيطة الموجهة نحو الرسائل (MOM).
قد يتسبب امتلاء المخزن المؤقت المطلوب في الاتصال غير المتزامن في مشاكل. يجب اتخاذ قرار بشأن حظر المرسل أو تجاهل الرسائل المستقبلية. قد يؤدي حظر المرسل إلى حالة جمود . إذا تم إسقاط الرسائل، يصبح الاتصال غير موثوق.
هجين
يمكن بناء الاتصال المتزامن فوق الاتصال غير المتزامن باستخدام مُزامِن . على سبيل المثال، يعمل مُزامِن ألفا (α-Synchronizer) على ضمان انتظار المُرسِل دائمًا لرسالة تأكيد من المُستقبِل. ولا يُرسل المُرسِل الرسالة التالية إلا بعد استلام التأكيد. من ناحية أخرى، يمكن أيضًا بناء الاتصال غير المتزامن فوق الاتصال المتزامن. على سبيل المثال، لا تُوفر النوى المصغرة الحديثة عادةً سوى آلية مراسلة متزامنة ، ويمكن تنفيذ المراسلة غير المتزامنة فوقها باستخدام خيوط مساعدة .
الكائنات الموزعة
تستخدم أنظمة تبادل الرسائل إما كائنات موزعة أو محلية. في حالة الكائنات الموزعة، قد يكون المرسل والمستقبل على حاسوبين مختلفين، يعملان بنظامي تشغيل مختلفين، ويستخدمان لغات برمجة مختلفة، وما إلى ذلك. في هذه الحالة، تتولى طبقة ناقل البيانات تفاصيل تحويل البيانات من نظام إلى آخر، وإرسال واستقبال البيانات عبر الشبكة، وما إلى ذلك. يُعد بروتوكول استدعاء الإجراءات عن بُعد (RPC) في نظام يونكس مثالًا مبكرًا على ذلك. مع هذا النوع من تبادل الرسائل، لا يُشترط أن يستخدم المرسل أو المستقبل البرمجة كائنية التوجه. يمكن تغليف أنظمة اللغات الإجرائية ومعاملتها ككائنات كبيرة الحجم قادرة على إرسال واستقبال الرسائل. [ 7 ]
من أمثلة الأنظمة التي تدعم الكائنات الموزعة: Emerald و ONC RPC و CORBA و Java RMI و DCOM و SOAP و. NET Remoting و CTOS و QNX Neutrino RTOS و OpenBinder و D-Bus . تُعرف أنظمة الكائنات الموزعة بأنظمة "اللا شيء المشترك" لأن تجريد تمرير الرسائل يخفي تغييرات الحالة الأساسية التي قد تُستخدم في تنفيذ إرسال الرسائل.
تُضيف عملية تمرير الرسائل الموزعة، أو غير المتزامنة، عبئًا إضافيًا مقارنةً باستدعاء إجراء. في هذه العملية، يجب نسخ الوسائط إلى الرسالة الجديدة. قد تحتوي بعض الوسائط على بيانات بحجم ميغابايت، ويجب نسخها جميعًا وإرسالها إلى الكائن المُستقبِل.
تختلف استدعاءات الإجراءات التقليدية عن تمرير الرسائل من حيث استخدام الذاكرة ووقت النقل وموقع البيانات. تُمرر الوسائط إلى المُستقبِل عادةً عبر سجلات عامة لا تتطلب مساحة تخزين إضافية أو وقت نقل إضافي، أو في قائمة معلمات تحتوي على عناوين الوسائط (بضع بتات). لا يُمكن تمرير العناوين في الأنظمة الموزعة لأن هذه الأنظمة تستخدم مساحات عناوين منفصلة.
تُعدّ متصفحات الويب وخوادم الويب أمثلة على العمليات التي تتواصل عبر تبادل الرسائل. أما عنوان URL فهو مثال على الإشارة إلى مورد دون الكشف عن تفاصيل العملية الداخلية.
لن ينتهي استدعاء روتين فرعي أو استدعاء دالة حتى تنتهي العملية الحسابية المستدعاة. في المقابل، قد يؤدي تمرير الرسائل غير المتزامن إلى وصول الاستجابة بعد فترة طويلة من إرسال رسالة الطلب.
عادةً ما يقوم معالج الرسائل بمعالجة الرسائل الواردة من أكثر من مُرسِل. وهذا يعني أن حالته قد تتغير لأسباب لا علاقة لها بسلوك مُرسِل واحد أو عملية عميل مُحدَّدة. وهذا يختلف عن السلوك المعتاد للكائن الذي تُستدعى عليه الدوال، حيث يُتوقع أن يبقى الكائن في الحالة نفسها بين استدعاءات الدوال. بعبارة أخرى، يتصرف معالج الرسائل بشكل مشابه للكائن المتقلب .
النماذج الرياضية
من أبرز النماذج الرياضية لتمرير الرسائل نموذج الممثل وحساب باي . [ 8 ] [ 9 ] رياضياً، الرسالة هي الوسيلة الوحيدة لنقل التحكم إلى كائن. إذا استجاب الكائن للرسالة، فإنه يمتلك دالة مخصصة لها.
جادل آلان كاي بأن تمرير الرسائل أهم من الكائنات في البرمجة الكائنية التوجه، وأن الكائنات نفسها غالبًا ما تُبالغ في تقديرها. ويستند نموذج البرمجة الكائنية الموزعة الحية إلى هذه الملاحظة؛ إذ يستخدم مفهوم تدفق البيانات الموزعة لوصف سلوك نظام موزع معقد من حيث أنماط الرسائل، باستخدام مواصفات عالية المستوى ذات طابع وظيفي. [ 10 ]
أمثلة
انظر أيضاً
- الرسائل النشطة
- الحوسبة الموزعة
- حلقة الأحداث
- نمط المراسلة
- تبادل الرسائل في مجموعات الحواسيب
- واجهة تمرير الرسائل
- الآلة الافتراضية المتوازية (PVM)
- لغات البرمجة التي تتضمن تمرير الرسائل كميزة أساسية:
مراجع
- ↑ فريق التحرير. "تمرير الرسائل - مسرد المصطلحات" . DevX . تم الاسترجاع في 3 يناير 2026 .
- ↑ غولدبيرغ، أديل؛ ديفيد روبسون (1989). سمول توك - 80 اللغة . أديسون ويسلي. الصفحات 5-16 . ISBN 0-201-13688-0.
- ↑ أورفالي، روبرت (1996). الدليل الأساسي للبقاء على قيد الحياة في بيئة العميل/الخادم . نيويورك: وايلي للنشر الحاسوبي. الصفحات 1-22 . ISBN 0-471-15325-7.
- ↑ جيهاني، ن. هـ. (1990). "تمرير الرسائل في لغة C المتزامنة: التزامن مقابل عدم التزامن" . البرمجيات: الممارسة والخبرة . 20 (6): 571-592 . doi : 10.1002/spe.4380200605 . ISSN 1097-024X .
- ↑ "2.3.3. تمرير الرسائل" . d3s.mff.cuni.cz. تم الاطلاع عليه بتاريخ 2026-01-03 .
- ↑ أورفالي، روبرت (1996). الدليل الأساسي للبقاء على قيد الحياة في بيئة العميل/الخادم . نيويورك: وايلي للنشر الحاسوبي. الصفحات 95-133 . ISBN 0-471-15325-7.
- ↑ أورفالي، روبرت (1996). الدليل الأساسي للبقاء على قيد الحياة في بيئة العميل/الخادم . نيويورك: وايلي للنشر الحاسوبي. الصفحات 375-397 . ISBN 0-471-15325-7.
- ↑ ميلنر، روبن (يناير 1993). "عناصر التفاعل: محاضرة جائزة تورينج" . اتصالات رابطة آلات الحوسبة . 36 (1): 78-89 . doi : 10.1145/151233.151240 .
- ↑ هيويت، كارل؛ بيشوب، بيتر؛ ستايغر، ريتشارد (20 أغسطس 1973). "صيغة ACTOR معيارية شاملة للذكاء الاصطناعي" . وقائع المؤتمر الدولي المشترك الثالث حول الذكاء الاصطناعي . IJCAI'73. سان فرانسيسكو، كاليفورنيا، الولايات المتحدة الأمريكية: دار مورغان كوفمان للنشر: 235-245 .
- ↑ كاي، آلان. "النماذج الأولية مقابل الفئات: ردًا على: هوت سبوت من صن" . lists.squeakfoundation.org . تم الاطلاع عليه في 2 يناير 2014 .
- ↑ "استخدام تمرير الرسائل لنقل البيانات بين الخيوط - لغة برمجة Rust" . Rust-lang.org .
للمزيد من القراءة
- راماشاندران، يو.؛ م. سولومون؛ م. فيرنون (1987). "دعم الأجهزة للاتصال بين العمليات" . وقائع الندوة الدولية السنوية الرابعة عشرة حول هندسة الحاسوب . مطبعة ACM.
- دالي، ويليام. "آلة حلوى الجيلي بين" . تم الاطلاع عليه بتاريخ 7 يونيو 2013 .
- ماكويلان، جون م.؛ ديفيد سي. والدن (1975). "بعض الاعتبارات لنظام اتصال بين العمليات عالي الأداء قائم على الرسائل" . وقائع ورشة عمل ACM SIGCOMM/SIGOPS لعام 1975 حول الاتصالات بين العمليات . مطبعة ACM.
- شيميزو، توشيوكي؛ تاكيشي هوري؛ هيروآكي إيشيهاتا (1992). "دعم الاتصال عبر الرسائل بزمن استجابة منخفض لجهاز AP1000" . وقائع الندوة الدولية السنوية التاسعة عشرة حول هندسة الحاسوب . مطبعة ACM.
روابط خارجية
- بنية الحوسبة الموزعة
- التواصل بين العمليات
