تا حالا شده توی پروداکشن ببینید سرویسهاتون Timeout میدن و ریکوئستها توی صف میمونن، در حالی که مصرف CPU زیر ۱۰ درصده و رم کاملاً آزاده؟ اینجا دقیقاً جاییه که با ThreadPool Starvation روبرو شدید. توی C# و .NET این فاجعه معمولاً به خاطر Sync-over-Async رخ میده؛ یعنی وقتی کدهای Async رو با .Result یا .Wait() بلاک میکنید. در این حالت تردهای موجود قفل میشن و چون اون تسکها برای اجرای Continuation خودشون باز هم به ترد آزاد نیاز دارن و الگوریتم Hill Climbing داتنت هم خیلی کند ترد جدید تزریق میکنه، سرور عملاً فریز میشه. راه حلش هم توی داتنت فقط رعایت کردن قانون Async All The Way و استفاده نکردن از کدهای Blocking روی تردهای ThreadPool هست.
@codehalics | کدهالیک
Post #1212
327

- 👍 3
- 🔥 3