GMP模型中,G在发生系统调用或网络调用时,如何保证其他G不被阻塞?
- 系统调用通过syscall,先解绑PM,P选择或新建M,重新调度,G状态为syscall,阻塞当前M。系统调用结束后获取PLocal G队列或全局G队列
- chan阻塞,chan结构体中sendq, recvq保存待写入或读取的g,设置状态Waiting。发生读取或接受时通过goready激活G,重新调度
- netpoll阻塞,fd设置为非阻塞,结构体中保存因fd被挂起的G。poll发现fd ready后执行goready
GMP模型中,G在发生系统调用或网络调用时,如何保证其他G不被阻塞?