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