FARA_JAVA Telegram 71
✳️ کاردزدی (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 — مطالب و آموزش‌های برنامه‌نویسی جاوا فرادرس




tgoop.com/Fara_Java/71
Create:
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

View MORE
Open in Telegram


Telegram News

Date: |

Telegram offers a powerful toolset that allows businesses to create and manage channels, groups, and bots to broadcast messages, engage in conversations, and offer reliable customer support via bots. Telegram is a leading cloud-based instant messages platform. It became popular in recent years for its privacy, speed, voice and video quality, and other unmatched features over its main competitor Whatsapp. The SUCK Channel on Telegram, with a message saying some content has been removed by the police. Photo: Telegram screenshot. How to create a business channel on Telegram? (Tutorial) Clear
from us


Telegram Fara_Java | فرا جاوا: آموزش برنامه‌نویسی جاوا
FROM American