协程
个人理解 就是在用户空间,实现了自定义的调度器(调度协程执行,记录上下文),去调度协程的执行。 协程好像还可以主动让出给其他协程执行,同时自身的状态阻塞住(表现为协程中产生让出副作用的那行语句之后的语句不执行会等待协程执行完;)。这常常和io密集型的任务有关,当io事件完成时,操作系统(OS)感知到 IO 完成,Python/js 的事件循环(Event Loop)感知到 OS 的通知,最终由 Python/js 完成了协程状态的切换
OS 的角色:操作系统内核会把这个任务挂在自己的事件监听表里 作用场景 1. 会避免线程的阻塞带来的上下文切换,阻塞后用户空间切到另一任务而避免了线程上下文的切换 2. 既然同一时间只能有一个协程任务运行,并且协程切换并不是系统态抢占式,那么协程一定是安全的:协程的任务不会在执行的一半,被打断(没有时间片类似机制),协程内部是要不要加锁看情况 看下面文章 如果在需要原子性的中途主动让出,那肯定是要加锁的 要不要加锁看自己的程序逻辑 协程是运行在一个线程上的,要不要加锁看协程让出执行权的执行流有没有数据竞争 python 中awit 后执行哪个协程任务是像js一样的eventloop吗 好像是的 协程和js的单线程非阻塞io加事件机制还挺像的,都是解决处理需要长时间等待的异步操作,比如 I/O 操作,只是协程好像在协作方面更完善好像,有上下文 https://segmentfault.com/a/1190000041568839