مورد 84: به زمانبندی رشته وابسته نباشید

1. نقش زمانبندی رشته
- تابع: تعیین می کند که کدام رشته های اجرایی باید اجرا شوند و برای چه مدت.
- تنوع: سیاست ها بین سیستم عامل ها متفاوت است.
- توصیه: برای صحت یا عملکرد به رفتار زمانبندی وابسته نباشید. این قابلیت حمل را به خطر می اندازد.
2. استراتژی برای برنامه های قوی
رشته های اجرایی را متعادل نگه دارید:
- میانگین تعداد رشته های اجرایی باید نزدیک به تعداد پردازنده های موجود باشد.
- از اضافه بار زمانبندی جلوگیری می کند و رفتار ثابت را تضمین می کند.
رشته های غیر قابل اجرا:
تعداد کل رشته ها ممکن است بیشتر باشد، اما نخ های انتظار (غیرقابل اجرا) بر بارگذاری تأثیر نمی گذارند.
3. تکنیک های مدیریت رشته ها
اجتناب از انتظار فعال:
- نخ ها نباید به طور مداوم وضعیت یک شی مشترک را بررسی کنند.
- این باعث افزایش استفاده از پردازنده و کاهش کارایی می شود.
تعداد رشته های اجرایی را کاهش دهید:
اندازه ی thread pools را در Executor Framework درست کنید.
کارهای کوچک ایجاد کنید، اما نه آنقدر کوچک که اضافه بار به عملکرد لطمه بزند.
4. مثال از عمل بد: داغ نگه دارید
public class SlowCountDownLatch {
private int count;
public SlowCountDownLatch(int count) {
this.count = count;
}
public void await() {
while (count > 0) {
// Espera-ativa: utiliza o processador desnecessariamente
}
}
public void countDown() {
if (count > 0) {
count--;
}
}
}
مشکل: منابع بیش از حد را مصرف می کند و پردازنده را بیهوده مشغول می کند.
جایگزین: از CountDownLatch استفاده کنید که از قفل کارآمد استفاده می کند.
5. Evitar o uso de Thread.yield
غیر قابل اعتماد:
- در پیاده سازی های مختلف JVM به طور متناقض کار می کند.
- مشکلات را به روشی قوی یا قابل حمل حل نمی کند.
مثال نادرست:
while (!condition) {
Thread.yield(); // Tentativa de "ceder" a CPU para outras threads
}
راه حل: برای کاهش رشته های اجرایی، کد را بازسازی کنید.
6. تنظیم اولویت موضوع
خیلی قابل حمل نیست:
- اولویت های موضوع بین سیستم عامل ها و JVM ها متفاوت است. استفاده توصیه شده:
- بهبود کیفیت خدمات در برنامه های کاربردی. از اصلاح مشکلات ساختاری خودداری کنید.
7. نتیجه گیری
- به زمانبندی وابسته نباشید:
- تصحیح برنامه
- بهینه سازی عملکرد
اجتناب کنید:
- Uso de Thread.yield.
- تنظیمات اولویت نخ بیش از حد.
بهترین رویکرد:
- برنامههای کاربردی را بازسازی کنید تا تعداد رشتههای اجرایی متعادلی را حفظ کنید.
نمونه ای از کتاب: