Senior
Агар GOMAXPROCS=2 ва ду доираи беинтиҳо бо амалҳои математикӣ дар ҳолат бошанд, оё дигар goroutineҳо иҷро мешаванд?
sobes.tech AI
Ҷавоб аз AI
اگر GOMAXPROCS=2 باشد، این بدان معنی است که برنامهریز Go میتواند همزمان از 2 نخ سیستمعامل برای اجرای goroutineها استفاده کند.
اگر دو حلقه بینهایت با عملیات ریاضی فشرده در حال اجرا باشند، هر دو کاملاً نخها را اشغال میکنند، زیرا تماسهای مسدودکننده یا عملیات ورودی/خروجی انجام نمیدهند.
در نتیجه، goroutineهای دیگر نمیتوانند زمان پردازنده دریافت کنند و اجرای آنها به شدت تأخیر میافتد یا تقریباً متوقف میشود.
برای حل چنین وضعیتی، باید یا بار در این حلقهها کاهش یابد، نقاطی اضافه شود که goroutineها runtime.Gosched() را فراخوانی میکنند یا عملیات مسدودکننده انجام میدهند، یا GOMAXPROCS را افزایش دهید تا تعداد بیشتری نخ به برنامهریز داده شود.