في المقال ده هنتناول كيفية تحقيق تواصل فعال بين الـ Concurrent Tasks ، وازاي نختار النوع المناسب لتطبيقاتنا، وكمان هنتعرف على نمط شائع في بناء الـ Concurrent Applications ألا وهو الـ Thread Pool.
زي ما ذكرنا في الـ Building Blocks احنا دايمًا مش بايدينا إننا نضمن إن الـ Concurrent Tasks تكون Independent عن بعضها ولكن احنا بنسعى لده ، وغالبًا ما هيكون فيه جزء في التطبيق بيعتمد على نتيجة Task تانية عشان يسلموا بعض فغالبًا التواصل بين المهام دي هيكون مهم وضروري في تنفيذ التطبيق بتاعنا.
اتكلمنا في بداية السلسلة عن الـ Building Blocks في أي Concurrent Application وهم الـ Process والـ Thread نقدر نشوفهم من هنا الأول:
أنواع التواصل
التواصل بين الـ Tasks أو المهام في أي Concurrent Program هو جوهر الموضوع لإنه لو متمش بشكل سليم فالمكاسب الناتجة من الموضوع هتكون عديمة الفايدة ، والـ OS بيوفر آليات بتسمح للـ Process والـ Threads من إنها تتواصل وتنسق بينها وبين بعض والآليات دي هي اللي بتعرف بالـ Interprocess Communication أو الـ IPC.
وفيه أكتر من نوع للـ Interprocess Communication وأكتر أنواع الـ IPC شيوعًا هم طريقتين ألا وهم الـ
الـ Shared Memory
الـ Message Passing
التواصل من خلال الـ Shared Memory
أبسط طريقة للتواصل بين المهام هي استخدام الـ Shared Memory ، وده لإنها بتسمح للمهام بإنهم يتواصلوا من بعض ويتشاركوا المعلومات من خلال الـ Virtual Address Space ويكأنهم بيقرأوا ويكتبوا في Local Variables موجودة في الـ Address Space.
فبالشكل ده أي تغييرات بتعملها Process أو Thread بتنعكس بشكل فوري على التانيين بدون تدخل الـ Operating System.
مثال من الواقع
تخيل أنك عايش في نفس البيت مع مجموعة من أصدقائك ، وفيه تلاجة واحدة بتستعملوها كلكوا ، فأنت ممكن في أي وقت تجيب منها اللي انت عاوزه وليكن تاخد شوكولاتة من علبة الشوكولاتة وتعرف أصدقائك إنهم ممكن ياخدوا شوكولاتة من العلبة كذلك.
فالتلاجة هنا كانت هي بمثابة الـ Shared Memory وانت وأصدقائك بمثابة المهام الي محتاجة تتواصل مع بعضها من خلال تخزين الـ Shared Data اللي هي في الحالة دي الشوكولاتة.
مزايا الـ Shared Memory
اشترك الآن بنشرة اقرأ‑تِك الأسبوعية
لا تدع أي شيء يفوتك. واحصل على أحدث المقالات المميزة مباشرة إلى بريدك الإلكتروني وبشكل مجاني!