مدونة فؤاد المالكي
  • الصفحة الرئيسية
تعريف الـ Thread

تعريف الـ Thread

– الثريد “Thread” بإختصار هو “خيط” أو سلسلة من الأوامر البرمجية. سنعتبر مجازاً بأن الأمر البرمجي يمثل سطر واحد من كود لبرنامج معين.

–∎–∎–∎–∎–∎–∎–∎–∎–

– المسؤول عن تشغيل هذا الخيط من الأوامر البرمجية هو الـ CPU “وحدة المعالجة المركزية”.

– يحتوي أي برنامج على ثريد واحد على الأقل، ويسمى الثريد الرئيسي main thread. في لغة الجافا مثلاً، دالة main تحتوي على مجموعة من الأوامر البرمجية اللتي ينفذها الـ CPU على الـ main thread عند تشغيل البرنامج.

– عند إحتواء البرنامج على أكثر من ثريد، فإن نظام التشغيل OS يقوم بجدولة الـ CPU للعمل على تنفيذ الأوامر الموجودة في “الثريدات”. وتختلف الطريقة بحسب مواصفات جهاز الحاسب المشغل ونظام التشغيل.

– لو كان الجهاز يحتوي على CPU واحد فقط، فإن نظام التشغيل يجبر هذا الـ CPU بالعمل على تنفيذ الأوامر الموجودة بالثريدات بشكل متزامن “concurrently”. مثال: لدينا 3 ثريدات، كيف يقوم الـ CPU بتنفيذها؟ في الحقيقة، تختلف الطريقة المتبعة من نظام تشغيل إلى آخر ولكن أغلب الأنظمة الحديثة تتبع طريقة round-robin algorithm، وتعتمد هذه الطريقة على المساواة في الأوقات المعطاة لكل ثريد time slices. الشكل التالي يوضح الطريقة (بإفتراض كل ثريد يحتوي على 4 أوامر برمجية):

∎–∎-………………-∎–∎
………∎–∎-………………-∎–∎
………………∎–∎-………………-∎–∎

كما يُلاحظ في الشكل السابق، قام نظام التشغيل بجدولة الـ CPU على جميع الثريدات لتشغيلها جميعاً بشكل متزامن. قام الـ CPU بتنفيذ أمرين من الثريد الأولى ثم قام بالانتقال “context-switching” إلى الثريد الثانية وقام بتنفيذ أمرين، ثم انتقل إلى الثريد الثالثة وقام بتنفيذ أمرين أيضاً، ثم عاد إلى الثريد الأولى ونفذ أمرين … وهكذا. في الحقيقة، ليس هناك طريقة ثابتة متبعة من قبل أنظمة التشغيل لتنفيذ الثريدات. في المثال السابق مثلاً، ربما سيقوم نظام التشغيل بتنفيذ الثريد الأول كاملاً ثم ينتقل إلى البقية. ربما أيضاً يقوم بتنفيذ الثريد الثاني أو الثالث قبل البقية. حتى أن الترتيب أيضاً سيختلف مع كل مرة تقوم فيها بتشغيل البرنامج. الترتيب غير مهم في أغلب الحالات، ولكن إن لزم ترتيبها، توجد عدة طرق للتحكم بالترتيب، ومنها جعل ثريد معين بأولوية أعلى للتنفيذ، أو تشغيل ثريد معين عند الانتهاء من تنفيذ ثريد آخر.

– عندما يحتوي جهاز الحاسب على أكثر من CPU واحد، أو يحتوي الـ CPU الواحد على عدة أنوية “cores”، يتم التنفيذ بشكل متوازي “in parallel”. لنطبق المثال السابق ولكن هذه المرة مع وجود CPU ثنائي النواة:

∎–∎–∎–∎………
∎–∎-………-∎–∎
………∎–∎–∎–∎

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

– لنأخذ مثال بسيط لتتضح الصورة بشكل أكبر:

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

ب/ مطعم يوجد به عامل واحد مشابه للمطعم السابق، ولكن هذه المرة الزبائن يقفون على 3 صفوف والعامل يقوم بخدمة الصفوف الثلاثة بأسلوب الـ round-robin. هذا مثال لجهاز حاسب (مطعم) به CPU واحد (العامل) و 3 ثريدات من الأوامر البرمجية (3 صفوف من الزبائن).

ج/ مطعم يوجد به عاملان، والزبائن تقف في 3 صفوف. هذا مثال لجهاز حاسب (مطعم) به 2 من الـ CPU أو CPU ثنائي النواة (العاملان) و3 ثريدات من الأوامر البرمجية (3 صفوف من الزبائن). هنا الإنتاجية ستزيد.

– ملحوظة أخيرة وهي بأن نظام التشغيل يحتوي على الآلاف من الثريدات ونظام التشغيل يقوم بجدولة الـ CPUs المتوفرة لتنفيذها، وليس برنامجك وحده من يتم خدمته من قبل الـ CPUs.

التعليقات (7)

  • يقول sh:
    25 مارس، 2017 الساعة 1:47 مساءً

    جزاكم الله كل خير على إثراء المحتوى العربي الشرح جميل جدا كنت في حاجته

    رد
  • يقول محمد:
    26 مارس، 2017 الساعة 8:56 مساءً

    مشكور جدا علي الشرح السهل الواضح

    ارجو ان تخخص مقال لعمليات التحويل في الجافا

    from int to String
    from String to int

    رد
  • يقول عبد الله:
    11 سبتمبر، 2017 الساعة 11:25 مساءً

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

    ملحوظة: يوجد موقع اسمه أكاديمية حسوب لو يتم إضافة نسخة من المقالات هنالك حتى تصل لشريحة أكبر وينتفع الناس بالعلم.

    استمر أخي فؤاد فإن مدونتك ومقالاتك تستحق القراءة.

    رد
  • يقول فيصل:
    19 يونيو، 2022 الساعة 11:51 مساءً

    الله يعطيك الصحه والعافيه

    رد
  • يقول عبدالله عزالدين:
    28 يناير، 2023 الساعة 11:25 مساءً

    السلام عليكم ورحمة الله وبركاته

    رد
  • يقول عبدالله عزالدين:
    28 يناير، 2023 الساعة 11:26 مساءً

    لو سمحتم اريد حل هذا السؤال
    كيف استفيد من الثريدات كمبرمج

    رد
  • يقول مالك أبو أنس:
    2 يوليو، 2024 الساعة 10:15 صباحًا

    جزاكم الله خيراً، شرح سهل ومُبسط

    رد

أضف تعليقك

اترك رداً على محمد إلغاء الرد

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

التالي

أداة البحث

التصنيفات

  • أمن معلومات (1)
  • برمجة (7)

آخر المقالات

  • جمل switch المحسنة في جافا 14
  • بعض المهارات التقنية التي يجب على كل مبرمج معرفتها والإلمام بأساسياتها
  • الـ Lambda Expressions في لغة جافا
  • شهادات الـ SSL وطريقة عمل البروتوكول الآمن HTTPS
  • نبذة عن الجافا
  • الطريق إلى شهادة الجافا OCA 1Z0-803
  • ما هو الـ stacktrace؟
  • تعريف الـ Thread

جميع الحقوق محفوظة ٢‎٠٢٤‬ © فؤاد المالكي