برنامه نویسی

مورد 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.
  • تنظیمات اولویت نخ بیش از حد.

بهترین رویکرد:

  • برنامه‌های کاربردی را بازسازی کنید تا تعداد رشته‌های اجرایی متعادلی را حفظ کنید.

نمونه ای از کتاب:

توضیحات تصویر

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا