代码改变世界

非阻塞IO

2018-09-04 17:33  冻奶香甜玉米片  阅读(181)  评论(0编辑  收藏  举报

非阻塞IO其实就是一直询问操作系统想要的信息来了没有

如socket套接字通信,就用监测信息尚未到达的错误用来切换到其他任务中去(try except BlockingIOError)

记得

server.setblocking(False)

 

但是它的缺点是:

1、一直占用CPU,自己的任务效率虽然高了,但是别人的任务效率就低了

2、是一个死循环,占用CPU做的无用功多,用于一直询问操作系统

3、当信息到了可以进行任务时,并不能及时切换

 

 

egon say(

1. 循环调用recv()将大幅度推高CPU占用率;这也是我们在代码中留一句time.sleep(2)的原因,否则在低配主机下极容易出现卡机情况
2. 任务完成的响应延迟增大了,因为每过一段时间才去轮询一次read操作,而任务可能在两次轮询之间的任意时间完成。
这会导致整体数据吞吐量的降低。

)