协程和select的区别
来源:13-5 ThreadPollExecutor 和 asycio 完成阻塞 IO 请求

慕码人5330596
2018-11-08
看到协程在调用阻塞操作时需要使用多线程来避开,
不过使用select的时候,是不需要的。
那么我们也可以说,select是通过单线程的IO多路复用,实线了多线程的功能。
其中,调用函数(callback)可以是阻塞的。
但是,对于yield或者协程来说,他的子生成器是不可以阻塞的。
既然如此,那还要协程干什么呢?
也许我的问题是因为我对于协程还不够理解,希望指教。
写回答
1回答
-
bobby
2018-11-11
select使用了io多路复用,但是不是事先了多线程的功能,而是提高了cpu的利用率
调用函数方式原理也是单线程,所以调用函数方式如果一个函数阻塞了,整个线程就block住了,所以这个时候调用函数也不能使用阻塞方式
协程的目的和调用函数方式是一样的,协程并没有比回调方式高级或者性嫩高很多,协程需要解决的是回调方式的各种弊端, 让我们有写同步方法的体验
10
相似问题