Sobes.tech
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) فراهم می‌کند.