关于不可接管阻塞问题补充
1、对一些磁盘读写这种较长时间等待的阻塞属于不可接管阻塞吗
2、go中对于处理io阻塞问题有用到io多路复用吗,如果有能列举哪些用到了吗。
3、对于大量不可接管阻塞go如何优雅的处理的
4、syscall阻塞时M和G会锁定吗
52
收起
正在回答 回答被采纳积分+1
1回答
Xargin
2021-05-19 17:47:47
磁盘读写确实是不可接管的,在 runtime 里的 FD 区分 pollable 和非 pollable,网络的那种才是 pollable,可以接管,文件的不行
你这个 io 多路复用我没理解。。。是说的网络协议里的多路复用么,一条连接上可以并发收发请求?类型 http2 那样的?
没有太好的办法,我们线上的服务一般和文件系统打交道比较少,还好,如果碰上了的话,一般可能是固定的 goroutine 数消费 channel(内存里的 buffer) 去写文件,控制被阻塞的数量,不让线程数涨太高。但实际场景还是会有线程数爆炸的情况的,我们在线上碰到过,特别一些用 cgo 的。
syscall 阻塞的时候 M 和 G 是在一起的,不会分开。只会把 P 拿走
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星