ما هو التزامن Concurrency و تعدد المسارات Multithreading في جافا

ليس من السهل الحديث عن التزامن Concurrency دون ذكر المقابل الإنجليزي له، فهناك كلمة Synchronization والتي تعني أيضاً المزامنة، وهناك أيضاً parallelism والتي من الممكن أن تترجم أحياناً بالمزامنة عند الحديث عن لغات البرمجة.

كانت أصابعك تطرقُ لوحات المفاتيح بسرعة وتسلسل تنقلُ الفكرة التي رسمتها في عقلك إلى لغة الحاسب، بينما تفعلُ ذلك أتاكَ زميلُك يسألُك عن مشكلةٍ مستعجلة في بيئة الإنتاج production environment.

معلومة: يحتاج تطوير النظم لعدة بيئات، منها بيئةُ التطوير Development Environment والتي يعملُ بها المبرمجون، وبيئة الاختبار Test Environment التي يعمل بها المختبرون، وبيئة الإنتاج Production Environment وهي البيئة التي يعمل عليها المستخدمون الحقيقيون للنظام.

أوقفت برمجتك وساعدته فيما يريد ثم عدتك إلى مكانك محاولاً تذكر المكان الذي توقفت فيه ثم استدعاء الأفكار التي كنت ترغبُ بتحويلها إلى شفراتٍ برمجية.

في هذه اللحظة بالذات، أتاكَ مُديرك يدعوك إلى اجتماعٍ مستعجل مع العملاء، حيثُ يبدو أن العملاء بحاجة إلى تبريرات تقنيّة وهي مرحلةٌ تعني أن العملاء محتقنون مشاعرياً.

بانتهاء الاجتماع العاصف وعودتك إلى مقعدك لا أستغربُ وضعك لرأسك بين يديك محاولاً استدعاء رُبع الأفكار التي كانت تنساب من رأسك إلى أصابعك دون فائدة!

كلُّنا ذاك الرجل، هل تعلم لماذا لا نستطيع استدعاءها الأفكار بعد عدة مقاطعات؟

لأن التزامن Concurrency ليس من الصفات المميزة لطريقة تفكير الإنسان.

أولاً، ما هو التزامن Concurrency كفكرة؟

الوصول المتزامن
الوصول المتزامن

تنفيذ أكثر من شيء في نفس الوقت.

هذا هو التزامن.

لو كان التزامنُ لديكَ سهلاً لاستطعت أن تحتفظ بتسلسل أفكارك عندما قاطعك زميلُكَ ومُديركَ أثناء عملك. ولكنّهُ شيءٌ لا يستطيعُ الإنسان فعلهُ ببساطة.

وعلى عكس ذلك، نسعد جداً بوجوده في كثيرٍ من الأحيان في حياتنا!

عندما تذهب إلى مكتبٍ لخدمات الجهمور (مثل مكتب البريد) تجد عادةً أكثرَ من موظف يؤدون نفس المهمة لخدمة أكثر من شخص في وقتٍ واحد.

تستطيعُ القول في هذه الحالة أن هذا المكتب يؤدي هذه الخدمة بشكلٍ متزامن.

وهل يوجد التزامن Concurrency في الحاسب؟

المزامنة التزامن concurrency وتعدد المسارات multithreading في الحواسيب

هنا سأستحدث عن تزامنين مختلفين .. انتبه!

حتى بداية الألفية الحالية كان للحواسيب معالج واحد، هل تعلم ماذا يعني ذلك؟

المعالج الواحد يعني أن الحاسب يستطيع أن يؤدي مهمة واحدة في الوقتِ الواحد!

فلنقل مثلاً أنك تكتب على برنامج الوورد وتشغّل ملفاً صوتياً في الخلفية، هاتين العمليتين تعملان في نفس الوقت ما يعني أنهما يُؤدَّيَان بشكل متزامن.

وفي الحواسيب ما قبل العام 2000 كان من البساطة تشغيل أكثر من برنامج في نفس الوقت!!

كيف كان يحدث ذلك والمعالج واحد؟!!

نعم، المعالج يؤدي مهمةً واحدة في الوقت الواحد، ولكن،،، نسبةً للسرعة العالية التي يمتلكها المعالج يقوم بالتبديل بين تنفيذ المهام بسرعةً عالية بحيثُ يبدو لكَ أن المهام تعمل بشكلٍ متزامن.

ولكن في الحقيقة، في الحواسيب ذات المعالج الواحد لا يتم تشغيل البرامج (تنفيذ العمليات) بشكل متوازٍ (متزامن Paralleled)، كما قلنا يتم التبديل بين العمليات بسرعةٍ عالية وهو ما ينتُج عنه في نظر المستخدم تزامن Concurrency في التنفيذ.

أما في الحواسيب التي تحتوي على أكثر من معالج فإنها تستطيع تنفيذ المهام أو تشغيل البرامج بشكل متوازٍ (متزامن paralleled) حقيقي.

هل تحتاج إلى التزامن Concurrency فعلاً أم أنه إضافة مرهقة؟!

المزامنة Concurrency تجعل البرامج أجمل للمستخدمين!

وكيف ذلك؟

مثلما كنت أكثر سعادة عندما زرتَ مكتب البريد ووجدت عدة أشخاص يؤدون نفس المهمة في نفس الوقت 🙂

المزامنة Concurrency ترفع معدل وسرعة استجابة النظم.

تخيل أن نظام التشغيل (ويندوز أو ماكنتوش مثلاً) لا يستطيع تشغيل أكثر من برنامج في نفس الوقت!

ملحوظة: نظام التشغيل يعتبر برنامجاً كذلك.

لا ملفات صوتية أثناء العمل، لا ملفين في نفس الوقت للمقارنة، لا يمكن الاحتفاظ ببرنامج مفتوح أثناء تشغيل آخر.

حتى الآلة الحاسبة لن تعمل أثناء كتابتك لشفرة مصدرية!

أما على مستوى البرامج، فإن المزامنة تعدُ عنصراً أساسياً في الكثير جداً من البرامج! وأُعطيك المثال الشهير..

بدون مزامنة لا مشاهدة لفيديوهات يوتيوب أثناء التحميل.

إذاً ما الفرق بين المزامنة Concurrency وتعدد المسارات Multithreading

جافا دعمت تعدد المسارات Multithreading منذ إطلاقها.

هذا الدعم تمثّل في توفير واجهات برمجيّة APIs تسهّل وتيسّر للمبرمج تطوير البرامج التي تدعم المزامنة.

في مثال الفيديو هنالك عمليتين تحدثان أثناء تشغيل الفيديو:

  1. عمليةٌ لتحميل الفيديو.
  2. عمليةٌ أخرى من أجل تشغيله.

كل عملية منهما تسمى بمسار Thread.

تعدد المسارات Multithreading هي وسيلة لتحقيق المزامنة Concurrency في البرامج والتطبيقات، فتعدد المسارات يعني تشغيل أكثر من مسار في نفس الوقت.

مثلما هو من الصعب عليك أن تنقل أفكارك بين مكان وآخر فإن تطوير التطبيقات والبرامج التي تدعم تعدد المسارات يحتاج إلى تحليل دقيق وتركيز عالٍ أثناء البرمجة.

فبعض البرامج قد تحتاج إلى مسارات متعددة، بعضها يعيش من بداية تشغيل البرنامج إلى نهايتة وآخرٌ  يُنشأ ويموت أثناء تنفيذ البرنامج،

الخلاصة

جافا تدعم التزامن عبر إتاحة تعدد المسارات Multithreading وتوفر واجهات يستطيع المبرمج استخدامها لتطبيق التزامن بأبسط طريقة ممكنة.

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

مصطفى الطيب

صديقٌ لنُظمِ المعلُومات و عُلومِ الحَاسِب و مُختصٌ بهما، مُحبٌ للعِلمِ و نَشرِه. أُشاركُ معارفي و تَجاربي و خِبراتي في تَدويناتٍ و دوراتٍ من خلال مُدونةِ عُلوم.

مقالات ذات صلة

‫7 تعليقات

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *