tgoop.com/Fara_Java/71
Last Update:
✳️ کاردزدی (Work Stealing) در جاوا — از صفر تا صد
در این مقاله به بررسی مفهوم کاردزدی در جاوا خواهیم پرداخت. منظور از کاردزدی (Work Stealing) نوعی راهبرد زمانبندی برای برنامههای رایانهای چندنخی در محاسبات موازی است. به این ترتیب مشکل اجرای محاسبات چندنخی به روش دینامیکی حل میشود. در این روش محاسبات، فرد میتواند نخهای اجرایی جدیدی را روی یک رایانه چندنخی به روش استاتیک با تعداد ثابتی پردازنده یا هسته ایجاد کند. این راهبرد از نظر زمان اجرا، مصرف حافظه و ارتباط بین پردازندهای عملکرد بسیار بهینهای دارد.
══ فهرست مطالب ══
○ کار دزدی در جاوا
○ پیادهسازی فریمورک Fork/Join
○ استخرهای نخ همگام و ناهمگام
○ مثال عملی: یافتن اعداد اول
○ سخن پایانی
🔸 کار دزدی در جاوا
مفهوم کاردزدی با هدف کاهش تنازع در اپلیکیشنهای چندنخی در جاوا معرفی شده است. این کار با استفاده از فریمورک fork/join انجام مییابد.
در فریمورک fork/join، مسائل یا وظایف به طور بازگشتی به وظایف فرعی تجزیه میشوند. این در ادامه وظایف فرعی به صورت منفرد حل شده و نتایج هر یک با هم ترکیب میشوند تا نتیجه نهایی را تشکیل دهند:
Result solve(Problem problem) {
if (problem is small)
directly solve problem
else {
split problem into independent parts
fork new subtasks to solve each part
join all subtasks
compose result from subresults
}
}
وظیفهای که تجزیه شده است به کمک «نخهای کارگر» (worker threads) حل میشود که از سوی «استخر نخ» (thread pool) تأمین میشوند. هر نخ کارگر دارای برخی وظایف فرعی است که مسئولیتشان را بر عهده گرفته است. این موارد در «صفهای دوطرفه» (deques) ذخیره میشوند.
🔸 پیادهسازی فریمورک Fork/Join
ما میتوانیم یک استخر نخ کاردزدی با استفاده از یکی از کلاسهای ForkJoinPool یا Executors بسازیم:
ForkJoinPool commonPool = ForkJoinPool.commonPool();
ExecutorService workStealingPool = Executors.newWorkStealingPool();
کلاس Executors یک متد OVERLOAD-شده به نام newWorkStealingPool دارد که یک آرگومان عدد صحیح میگیرد که نماینده سطح «موازیسازی» (parallelism) است.
همچنین Executors.newWorkStealingPool یک تجرید از ForkJoinPool.commonPool است. تنها تفاوت در این است که Executors.newWorkStealingPool یک استخر در حالت ناهمگام میسازد که ForkJoinPool.commonPool این کار را انجام نمیدهد.
مطالعه ادامه مطلب 👇👇
🔗 کاردزدی (Work Stealing) در جاوا — از صفر تا صد — کلیک کنید (+)
📌 کانال اختصاصی آموزشی برنامهنویسی جاوا
آخرین مطالب علمی، مقالات رایگان و ویدئوهای آموزشی برنامهنویسی جاوا را در کانال اختصاصی [@Fara_Java] دنبال کنید. 👇
@Fara_Java — مطالب و آموزشهای برنامهنویسی جاوا فرادرس
BY Fara_Java | فرا جاوا: آموزش برنامهنویسی جاوا

Share with your friend now:
tgoop.com/Fara_Java/71