Go 阻塞机制:何时发生阻塞以及调度器如何处理
在 Go 语言中,以下情况会导致阻塞发生:\n1. 当 goroutine 执行一个阻塞的系统调用(如读写文件、网络 I/O 等)时,会发生阻塞。\n2. 当 goroutine 试图向一个已满的无缓冲通道发送数据时,会发生阻塞。\n3. 当 goroutine 试图从一个空的无缓冲通道接收数据时,会发生阻塞。\n4. 当 goroutine 试图从一个空的带缓冲通道接收数据,而没有其他 goroutine 向该通道发送数据时,会发生阻塞。\n\n当发生阻塞时,调度器会暂停当前 goroutine 的执行,并切换到其他可运行的 goroutine 去执行,以确保程序的并发性和高效性。调度器会在某些条件满足时重新唤醒被阻塞的 goroutine,使其继续执行。例如,当一个被阻塞的系统调用完成时,或者当有其他 goroutine 向一个被阻塞的通道发送数据时,被阻塞的 goroutine 会被唤醒并继续执行。
原文地址: https://www.cveoy.top/t/topic/qClN 著作权归作者所有。请勿转载和采集!