协程

背景

python中的多线程使用的是操作系统中的原生线程

概念

在单进程的条件下实现并发

操作系统无法感知到单线程中的协程之间的切换

因为操作系统中并没有协程的概念,

协程是程序员用代码实现的一种并发

实现协程的必备条件

基于多道技术,我们知道了线程间的切换需要实现空间和时间上的复用,即:保存状态+切换

当程间遇到阻塞时进行切换才是有意义的

如果遇到计算时还切换,只会徒增切换时间

批判性看待协程

优点

  • 协程
    • 协程切换是不经过操作系统的,节省了大量的时间
    • 是使得原来需要阻塞切换CPU的地方,切换到了其他任务上,大大减少了切换CPU的次数
    • PS:最理想的状态是,每次操作系统分配的时间片到了再切换到其他线程
  • 多线程
    • 切换不仅经过操作系统,还要和系统中的其他线程竞争

缺点

  • 对比多线程
    • 如果有一个阻塞没有捕获到,即在阻塞时没有切换到其他任务,那么这个阻塞将会变成所有任务的阻塞
    • 而多线程会自动IO切换,没有相上面的顾虑
  • 对比多进程
    • 和多线程一样,无法使用CPU的多核优势

为什么要使用协程

什么时候使用协程

  • 协程配合多进程多线程使用,大大提高了我们程序对CPU的利用率

转载于:https://www.cnblogs.com/marklijian/p/11575234.html