关于协程的理解以及遇到的问题
来源:13-5 ThreadPollExecutor 和 asycio 完成阻塞 IO 请求

WittChen
2020-03-20
老师您好,这里通过线程池的方式解决了代码中编写阻塞代码的问题,但是老师之前讲协程的时候说的是偏向于方法间的切换,我的理解,就是在遇到IO操作的时候协程可以很智能判断,然后直接切换到其他的IO操作,就像课中提到的asynio.sleep,我就把这个操作当做了IO操作,然后几乎是同时的,每个方法都执行好,然后程序退出,但是听课了那么久,这点感觉老师都没有讲到,这点是怎么实现的,原理是什么,所以在用协程+线程池的时候总感觉有点违背了当初的设计,协程的出现不是就是为了解决不使用多线程来解决高并发的问题吗,不是说线程间切换开销大,而方法间切换的开销要小于线程吗,所以协程如果用多线程的方式来解决io阻塞问题,总觉得不合理,希望老师看到了能指出我其中错误的理解,教我怎么正确理解协程
写回答
1回答
-
线程池可以编写阻塞方法,但是这个切换是线程间切换,是由操作系统完成的,操作系统能同时维护的线程是有限的,上百个线程以后操作系统可能就hold不住
协程是函数级别的,维护上万个函数调用是很轻松的事情。这个不会深入到操作系统的线程级别去
课程中没有说过协程能做到的切换线程做不到,只是两种切换级别不同,线程是操作系统级别,协程序是函数级别,两者能同时维护的数量差异很大,所以协程的并发会高很多
012020-03-22
相似问题