از اون طرف توی Node.js که خیلیها فکر میکنن کلاً Single-Thread هست، کتابخونه زیربنایی libuv یک ThreadPool داره که دیفالت فقط ۴ تا ترد برای کارهای سنگین و Blocking مثل File System، عملیات Crypto (مثل bcrypt)، پکیج zlib و dns.lookup در نظر گرفته. حالا اگر ۴ تا ریکوئست همزمان بیان و با کاری مثل هش کردن پسورد هر ۴ تا ترد رو درگیر کنن، ریکوئست پنجم که فقط میخواد یک فایل ساده بخونه یا DNS رو لوکاپ کنه پشت این صف قفل میشه؛ یعنی Event Loop کاملاً بیکاره ولی کل I/O های وابسته به ThreadPool فلج شدن. برای جلوگیری از این گلوگاه توی نود، باید توی پروداکشن سایز UV_THREADPOOL_SIZE رو بیشتر کنید، به جای dns.lookup سراغ dns.resolve برید و پردازشهای سنگین CPU-bound رو به Worker Threads منتقل کنید.
@codehalics | کدهالیک
Post #1213
171
کدهالیک | codehalic تا حالا شده توی پروداکشن ببینید سرویسهاتون Timeout میدن و ریکوئستها توی صف میمونن، در حالی که مصرف CPU زیر ۱۰ درصده و رم کاملاً آزاده؟ اینجا دقیقاً جاییه که با ThreadPool Starvation روبرو شدید. توی C# و .NET این فاجعه معمولاً به خاطر Sync-over-Async رخ…
- 🔥 2