UV_THREADPOOL_SIZE تعدادشون رو بیشتر یا کمتر کنید.توی نودجیاس سایز پیشفرض ترد پول روی ۴ تنظیم شده و میتونی اون رو دستی بین ۱ تا ۱۰۲۴ تغییر بدی. تابع
os.availableParallelism() این کار رو اتوماتیک انجام نمیده و فقط تعداد هستههای در دسترس پردازنده رو میده.نویسنده توی این مقاله میگه افزایش خودکار تعداد تردهای ترد پول بر اساس تعداد هستههای CPU (مثلاً با تابع `availableParallelism`) اصلاً ایده درستی نیست. دلیلش اینه که این تابع فقط تعداد هستههای موجود رو نشون میده، نه میزان آزاد بودنشون رو. اگه برنامههای مختلف فکر کنن همه هستهها خالیه و کلی ترد جدید بسازن، سرور دچار رقابت شدید بین پروسسها میشه. این کار باعث افزایش جابهجاییهای پردازنده (Context Switching) و پر شدن کش میشه که در نهایت حتی خود ایونت لوپ اصلی نودجیاس رو هم کُند میکنه.
از طرف دیگه، زیاد کردن تردها شاید برای کارهای I/O که منتظر دیسک میمونن خوب باشه، اما برای کارهای محاسباتی سنگین مثل bcrypt و gzip اوضاع رو بدتر میکنه و زمان پاسخگویی به درخواستها رو بالا میبره. نویسنده اشاره میکنه که پایین آوردن اولویت تردها (مثل nice 10) هم مشکل رو کامل حل نمیکنه. در نهایت حرفش اینه که سایز ترد پول نباید اتوماتیک تغییر کنه، بلکه باید بر اساس تست کارایی واقعی روی سرور شلوغ و نوع برنامه به شکل دستی تنظیم بشه.
https://blog.platformatic.dev/more-threads-on-an-already-busy-machine
@codehalics | کدهالیک