协程的概念
协程
背景
python中的多线程使用的是操作系统中的原生线程
概念
在单进程的条件下实现并发
操作系统无法感知到单线程中的协程之间的切换
因为操作系统中并没有协程的概念,
协程是程序员用代码实现的一种并发
实现协程的必备条件
基于多道技术,我们知道了线程间的切换需要实现空间和时间上的复用,即:保存状态+切换
当程间遇到阻塞时进行切换才是有意义的
如果遇到计算时还切换,只会徒增切换时间
批判性看待协程
优点
- 协程
- 协程切换是不经过操作系统的,节省了大量的时间
- 是使得原来需要阻塞切换CPU的地方,切换到了其他任务上,大大减少了切换CPU的次数
- PS:最理想的状态是,每次操作系统分配的时间片到了再切换到其他线程
- 多线程
- 切换不仅经过操作系统,还要和系统中的其他线程竞争
缺点
- 对比多线程
- 如果有一个阻塞没有捕获到,即在阻塞时没有切换到其他任务,那么这个阻塞将会变成所有任务的阻塞
- 而多线程会自动IO切换,没有相上面的顾虑
- 对比多进程
- 和多线程一样,无法使用CPU的多核优势
为什么要使用协程
什么时候使用协程
- 协程配合多进程多线程使用,大大提高了我们程序对CPU的利用率