Junior — Middle
Чӣ гуна гузариши goroutine ба ҳолати бастан дар Go иҷро мешавад?
sobes.tech AI
Ҷавоб аз AI
در زبان Go، یک goroutine زمانی وارد حالت مسدود (blocked) میشود که منتظر رویدادی مانند ورودی/خروجی، دریافت مقدار از یک کانال، آزادسازی یک mutex یا تایمر باشد. در این لحظه، برنامهریز (scheduler) زبان Go اجرای آن goroutine را متوقف کرده و به goroutineهای دیگر آماده برای اجرا میپردازد.
برای مثال، اگر یک goroutine سعی کند از یک کانال بخواند، اما در کانال دادهای نباشد، تا زمانی که یک نخ دیگر دادهها را ننویسد، مسدود میشود:
ch := make(chan int)
func() {
val := <-ch // تا رسیدن مقدار، مسدود میشود
fmt.Println(val)
}()
ch <- 42 // goroutine را آزاد میکند
بنابراین، مسدود کردن goroutine یک مکانیزم برنامهریزی همکاری است که امکان استفاده مؤثر از منابع سیستم را بدون انتظار فعال (busy waiting) فراهم میکند.