协程和select的区别

来源:13-5 ThreadPollExecutor 和 asycio 完成阻塞 IO 请求

慕码人5330596

2018-11-08

看到协程在调用阻塞操作时需要使用多线程来避开,
不过使用select的时候,是不需要的。

那么我们也可以说,select是通过单线程的IO多路复用,实线了多线程的功能。
其中,调用函数(callback)可以是阻塞的。

但是,对于yield或者协程来说,他的子生成器是不可以阻塞的。
既然如此,那还要协程干什么呢?

也许我的问题是因为我对于协程还不够理解,希望指教。

写回答

1回答

bobby

2018-11-11

  1. select使用了io多路复用,但是不是事先了多线程的功能,而是提高了cpu的利用率

  2. 调用函数方式原理也是单线程,所以调用函数方式如果一个函数阻塞了,整个线程就block住了,所以这个时候调用函数也不能使用阻塞方式

  3. 协程的目的和调用函数方式是一样的,协程并没有比回调方式高级或者性嫩高很多,协程需要解决的是回调方式的各种弊端, 让我们有写同步方法的体验


1
0

Python3高级核心技术97讲,高级进阶的必学课程

socket编程/多线程/多进程/线程池/asyncio并发编程/协程和异步IO

2121 学习 · 551 问题

查看课程