Goroutine的切换时机

1.select操作阻塞的时候

select 是一个用于处理多个通道(channels)操作的关键字,它用于选择多个通道中的一个进行操作。当多个通道都准备好时,select 会随机选择一个执行。如果没有任何通道准备好,select 会根据某些条件进行阻塞。

2.io,通道(channel)的发送和接收被阻塞

当该gorutine在进行I/O操作时(网络请求,文件读取等),就会阻塞当前协程,GO会调用其他协程,并且将该协程标记为阻塞状态.

4.程序员显示编码操作

3.时间片轮转

5.等待锁

在 Go 中,sync.Mutex 是用来实现互斥锁的标准库类型,它提供了 LockUnlock 方法。当一个 goroutine 调用 Lock 方法时,如果锁已经被其他 goroutine 持有,当前 goroutine 将会阻塞,也就会被切换到其他的协程执行,直到锁被释放

6.程序调用(系统自行调用或者显示调用)

import "runtime"

go func() {
    // 做一些计算或任务
    runtime.Gosched() // 主动让出 CPU 执行权
    // 继续执行其他任务
}()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值