مجموعة الخيوط

في برمجة الحاسوب ، يُعدّ مجمع الخيوط نمطًا برمجيًا يُستخدم لتحقيق التزامن في تنفيذ البرامج. ويُعرف أيضًا بنموذج العمال المتكررين أو نموذج فريق العمل [ 1 ]. يحتفظ مجمع الخيوط بعدة خيوط في انتظار تخصيص المهام لتنفيذها بشكل متزامن من قِبل البرنامج المُشرف. من خلال الحفاظ على مجمع الخيوط، يُحسّن هذا النموذج الأداء ويتجنب زمن الاستجابة الناتج عن الإنشاء والتدمير المتكرر للخيوط في المهام قصيرة الأجل [ 2 ] . ومن خصائصه الجيدة الأخرى القدرة على الحد من حمل النظام، وذلك باستخدام عدد أقل من الخيوط المتاحة. ويتم ضبط عدد الخيوط المتاحة وفقًا لموارد الحوسبة المتاحة للبرنامج، مثل قائمة انتظار المهام المتوازية بعد اكتمال التنفيذ.
أداء
حجم مجموعة الخيوط هو عدد الخيوط المُحتفظ بها كاحتياط لتنفيذ المهام. وهو عادةً مُعامل قابل للتعديل في التطبيق، ويتم ضبطه لتحسين أداء البرنامج. [ 3 ] يُعد تحديد الحجم الأمثل لمجموعة الخيوط أمرًا بالغ الأهمية لتحسين الأداء.
تتمثل إحدى مزايا استخدام مجمع الخيوط بدلاً من إنشاء خيط جديد لكل مهمة في أن تكلفة إنشاء الخيوط وتدميرها تقتصر على الإنشاء الأولي للمجمع، مما قد يؤدي إلى تحسين الأداء واستقرار النظام . قد تكون عملية إنشاء خيط وموارده المرتبطة به وتدميرها مكلفة من حيث الوقت. ومع ذلك، فإن وجود عدد كبير من الخيوط الاحتياطية يُهدر الذاكرة، كما أن تبديل السياق بين الخيوط القابلة للتنفيذ يُؤثر سلبًا على الأداء. فعلى سبيل المثال، يمكن الحفاظ على اتصال المقبس بمضيف شبكة آخر، والذي قد يستغرق العديد من دورات وحدة المعالجة المركزية لقطعه وإعادة إنشائه، بكفاءة أكبر من خلال ربطه بخيط يستمر لأكثر من معاملة شبكية واحدة.
قد يكون استخدام مجمع الخيوط مفيدًا حتى مع تجاهل وقت بدء تشغيل الخيوط. توجد تطبيقات لمجمعات الخيوط تُسهّل عملية ترتيب المهام، والتحكم في التزامن، ومزامنة الخيوط على مستوى أعلى بكثير مما يُمكن تحقيقه بسهولة عند إدارة الخيوط يدويًا. [ 4 ] [ 5 ] في هذه الحالات، قد تكون فوائد الأداء ثانوية.
عادةً، يتم تنفيذ مجموعة الخيوط على جهاز كمبيوتر واحد. ومع ذلك، ترتبط مجموعات الخيوط من الناحية المفاهيمية بمزارع الخوادم حيث تقوم عملية رئيسية، قد تكون مجموعة خيوط بحد ذاتها، بتوزيع المهام على عمليات عاملة على أجهزة كمبيوتر مختلفة، بهدف زيادة الإنتاجية الإجمالية. وتُعدّ المشكلات المتوازية المعقدة مناسبة جدًا لهذا النهج.
يمكن تعديل عدد الخيوط ديناميكيًا خلال دورة حياة التطبيق بناءً على عدد المهام المنتظرة. على سبيل المثال، يمكن لخادم الويب إضافة خيوط عند ورود طلبات كثيرة لصفحات الويب ، ويمكنه إزالة خيوط عند انخفاض هذه الطلبات. ويترتب على زيادة عدد الخيوط زيادة في استهلاك الموارد. وتؤثر الخوارزمية المستخدمة لتحديد وقت إنشاء الخيوط أو إزالتها على الأداء العام.
- يؤدي إنشاء عدد كبير جدًا من الخيوط إلى إهدار الموارد وإضاعة الوقت في إنشاء الخيوط غير المستخدمة.
- يؤدي تدمير عدد كبير جدًا من الخيوط إلى استغراق وقت أطول لاحقًا عند إعادة إنشائها.
- قد يؤدي إنشاء الخيوط ببطء شديد إلى ضعف أداء العميل (أوقات انتظار طويلة).
- قد يؤدي تدمير الخيوط ببطء شديد إلى حرمان العمليات الأخرى من الموارد.
في اللغات
في bash يتم التنفيذ بواسطة --max-procs/ -Pفي xargs ، على سبيل المثال:
# جلب 5 عناوين URL بالتوازي urls =( "https://example.com/file1.txt" "https://example.com/file2.txt" "https://example.com/file3.txt" "https://example.com/file4.txt" "https://example.com/file5.txt" )printf '%s\n' " ${ urls [@] } " | xargs -P 5 -I {} curl -sI {} | grep -i "content-length:"في لغة Go ، يُطلق عليه اسم مجموعة العمال:
الحزمة الرئيسيةاستيراد ( "fmt" "time" )func worker ( id int , jobs <- chan int , results chan < - int ) { for j : = range jobs { fmt.Println ( "worker" , id , " started job" , j ) time.Sleep ( time.Second ) fmt.Println ( " worker " , id , " finished job" , j ) results < - j * 2 } }func main () { const numJobs = 5 jobs := make ( chan int , numJobs ) results := make ( chan int , numJobs )for w := 1 ; w <= 3 ; w ++ { go worker ( w , jobs , results ) }for j := 1 ; j <= numJobs ; j ++ { jobs <- j } close ( jobs )for a := 1 ; a <= numJobs ; a ++ { <- results } }سيتم طباعة ما يلي:
$ time go run worker-pools.go بدأ العامل 1 المهمة 1 بدأ العامل 2 المهمة 2 بدأ العامل 3 المهمة 3 أنهى العامل 1 المهمة 1 بدأ العامل 1 المهمة 4 أنهى العامل 2 المهمة 2 بدأ العامل 2 المهمة 5 أنهى العامل 3 المهمة 3 أنهى العامل 1 المهمة 4 أنهى العامل 2 المهمة 5الوقت الحقيقي 0 م 2.358 ثانيةانظر أيضاً
مراجع
- ↑ غارغ، راجات ب. وشارابوف، إيليا. تقنيات لتحسين التطبيقات - الحوسبة عالية الأداء. برنتيس هول 2002، ص 394
- ↑ هولوب، ألين (2000). ترويض خيوط جافا . أبريس. ص 209.
- ↑ ييبي لينغ؛ تريسي مولين؛ شياولا لين (أبريل 2000). "تحليل الحجم الأمثل لمجموعة الخيوط". مجلة ACM SIGOPS لأنظمة التشغيل . 34 (2): 42-55 . doi : 10.1145/346152.346320 . S2CID 14048829 .
- ↑ "فئة QThreadPool | Qt Core 5.13.1" .
- ↑ "GitHub - vit-vit/CTPL: مكتبة حديثة وفعالة لتجميع الخيوط بلغة C++" . GitHub . 2019-09-24.
- ↑ شفيد، بول (2010-01-07). "التوازي السهل باستخدام باش في لينكس" . coldattic.info . تم الاسترجاع في 2025-01-26 .
- ↑ "xargs(1) - صفحة دليل لينكس" . www.man7.org . تاريخ الاسترجاع: 26-01-2025 .
- ↑ "التحكم في التوازي (GNU Findutils 4.10.0)" . www.gnu.org . تاريخ الاسترجاع: 26-01-2025 .
- ↑ "العمل بالمثال: مجموعات العمال" . gobyexample.com . تم الاطلاع عليه بتاريخ 27-07-2021 .
- ↑ "Effective Go - The Go Programming Language" . golang.org . تم الاطلاع عليه بتاريخ 27-07-2021 .
هناك طريقة أخرى لإدارة الموارد بكفاءة، وهي تشغيل عدد ثابت من عمليات المعالجة الفرعية (goroutines) التي تقرأ جميعها من قناة الطلب. يحد عدد عمليات المعالجة الفرعية من عدد الاستدعاءات المتزامنة للمعالجة.
- ↑ "حالة استخدام مجموعات العمال في لغة Go — brandur.org" . brandur.org . تاريخ الاسترجاع: 27 يوليو 2021.
مجموعات العمال هي نموذج يعمل فيه عدد ثابت من العمال (m) (مُنفذ بلغة Go باستخدام goroutines) على إنجاز n مهمة في قائمة انتظار (مُنفذة بلغة Go باستخدام قناة). تبقى المهام في قائمة الانتظار حتى يُنهي أحد العمال مهمته الحالية ويبدأ مهمة جديدة.
روابط خارجية
- " الاستعلام بالتقطيع، والتنفيذ المتوازي، والربط: نمط مجمع الخيوط في جافا " بقلم بينيلداس سي إيه
- " مجموعات الخيوط وقوائم انتظار العمل " بقلم برايان غوتز
- " طريقة لتجميع خيوط العمل " بقلم براديب كومار ساهو
- " قائمة العمل " من تأليف أوري تويغ: عرض توضيحي لرمز C++ للخيوط المجمعة التي تنفذ قائمة عمل.
- " تجميع مؤشرات الترابط في نظام ويندوز وتسلسل التنفيذ "
- " حوض الخيوط الذكية " من تصميم آمي بار
- " برمجة مجموعة الخيوط في إطار عمل .NET " بقلم ديفيد كارمونا
- " إنشاء مجموعة مؤشرات ترابط حظرية للإشعارات في جافا " بقلم أمير كرش
- " البرمجة العملية متعددة الخيوط باستخدام بايثون: مجموعات الخيوط وقوائم الانتظار " بقلم نوح غيفت
- " تحسين استراتيجيات مجمع الخيوط لـ CORBA في الوقت الحقيقي " بقلم عرفان بيارالي، ومارينا سبيفاك، ودوغلاس سي. شميدت ، ورون سيترون
- " الإلغاء المؤجل: نمط سلوكي " بقلم فيليب باخمان
- " مجموعة خيوط C++17 للحوسبة العلمية عالية الأداء " بقلم باراك شوشاني
- الخيوط (الحوسبة)
- أنماط تصميم البرمجيات
- الحوسبة المتزامنة
- الحوسبة المتوازية
