الگوی مخزن نخ
در طرحریزی کامپیوتری، الگوی مخزن نخ زمانی قابل اجراست که تعدادی از نخها برای اجرای فعالیتها که عموماً در یک ردیف سازماندهی شدهاند، ساخته شدهاند. نتایج این فعالیتها که در حال اجراست میتواند باز هم در یک ردیف قرار گیرد و حتی فعالیتهایی که هیچ نتیجهای حاصل نمیدهند نیز به همین منوال اعمال میشوند.
عموماً فعالیتهای بسیار بیشتری از این نخها وجود دارد. به محض اینکه هر نخی فعالیتش را به اتمام میرساند برای فعالیت بعدی از ردیف ذکر شده درخواست میدهد و این کار را تا زمانی انجام میدهد که همه فعالیتها به اتمام برسند. سپس نخ تا زمانی که فعالیتهای جدیدی در دسترس قرار بگیرند خاتمه مییابد. تعداد نخها در قالب پارامتر استفاده میشوند که میتواند خود را برای بهترین اجرا آماده کند. علاوه براین، تعداد نخها میتواند بر اساس فعالیتهای مورد انتظار پویا باشند. به عنوان مثال، یک سرور وب میتواند در صورت لزوم (یعنی در حالتی که اگر صفحات وب زیادی درخواست بدهند) نخی را بیفزاید و همچنین میتواند نخها را وقتی که صفحات وب آن درخواست را رد میکنند، حذف کند.
هزینه داشتن مخزن نخ وسیع تر استفاده منبع را افزایش میدهد. الگوریتم کاربردی برای تشخیص ساخت یا نابودی نخها بر عملکرد کلی تأثیر بسزایی دارد.
- ایجاد نخهای بسیار زیاد، منابع و زمان در ایجاد هرگونه نخ نامناسب هدر میرود.
- نابودی نخهای بسیار زیاد و زمان بیشتری صرف میشود اگر بعداً بخواهیم آن را بسازیم.
- ایجاد نخها به صورت آهسته و کند ممکن است باعث اجرای ضعیف کاربران شود.
- ایجاد نخها به صورت آهسته و کند ممکن است باعث ازبین بردن دیگر مراحل منابع و مراجع شود.
الگوریتم انتخابی به مشکل مورد نظر و الگوهای استفاده مورد انتظار بستگی دارد. اگر تعداد وظایف زیاد باشد، ساختن یک نخ برای هر کدام غیرعملی میشود. یکی دیگر از مزایای استفاده از مخزنهای نخ¬ به جای ساختن نخ جدید برای هر وظیفه این است که ساختن و تخریب نخ پشت سر هم نفی شدهاست. این موضوع باعث عملکرد بهتر و پایداری بهتر سیستم میشود. ایجاد و تخریب نخ و همچنین منابع مرتبط با آن فرایندی زمانبر است. تعداد بیش از حد نخها حافظهٔ زیادی نیز دربرمی گیرد. تعویض زمینه بین نخها عملکرد را پایین میآورد. برای مثال، اتصال سوکت به موتور دیگر که ممکن است شامل هزاران چرخه تخریب و ایجاد باشد، میتواند توسط ارتباط آن با نخی که فقط در یک انتقال وجود دارد، از بین برود.
هنگامی که یک الگو را پیادهسازی میکنیم برنامهنویس باید از نخ امن صف مطمئن باشد. در جاوا، شما میتوانید با استفاده از کلمه کلیدی همگامشده متد مناسب را همگام کنید. این کار بلاک اصلاح شده را توسط همگام شده به یک ساختار اتمیک مقید میکند، بنابراین هر نخی که میخواهد منبع وابسته را استفاده کند مجبور میکنید تا زمانی که هیچ نخی از منبع استفاده نمیکند منتظر بماند. یک چالش در این روش گران بودن همگام سازی است. شما میتوانید یک شی ایجاد کنید که لیستی از همه کارها را در صف نگه دارد و آن یک یگانه است. با اینکه نخها بهطور مفهومی به یک سرور اصلی (مزرعه) با یک فرایند رئیس مربوط میشود که این نخها کارها را بین فرایندهای کارگر در کامپیوترهای مختلف توزیع میکنند تا توان عملیاتی را بالا ببرند ولی معمولاً یک دسته نخ بر روی یک کامپیوتر اجرا میشود. مسئله برآشفتن موازی با این روش قابل جوابگویی است.
منابع
- Garg, Rajat P. & Sharapov, Ilya Techniques for Optimizing Applications - High Performance Computing Prentice-Hall 2002, p. 394