初探python协程

第一次研究协程,仅做学习记录,如果有不对的地方,还望各位不吝赐教,多谢。

什么是协程(Coroutine)?

协程,又称微线程。是一种可以在函数内部中断并返回的一种特殊函数,它和普通函数不同在于,普通函数只有一个入口,一个出口(return),必须从上至下顺序执行。协程会通过yield保存函数的数据和状态,并将函数挂起,待到再次激活时,从上次挂起的地方继续执行。

协程有什么优势?劣势呢?

优势

1.协程最大的优势是执行效率非常高,因为都是在同一线程中进行,就避免了切换线程的开销,所以和多线程相比,线程越多协程的优势越明显。
2.协程不需要多线程的锁机制,因为只有一个线程,就不存在同时写变量的冲突,在协程中控制共享资源不加锁,只需要判断状态就好,所以效率比多线程也高很多。

劣势

由于python的GIL机制(同一时刻,同一cpu只允许有一个线程在执行),所以无法充分利用多核CPU,造成资源上的浪费。
当然,前人都已经帮我们想好了,使用多进程+协程就可以解决这个问题。
多进程可以充分利用多核CPU,这就避免了GIL的限制,同时也能发挥协程的高效率,可以获得极高的性能。

gevent

gevent是第三方库。
通过greenlet实现协程,其基本思想是:
当一个greenlet遇到IO操作时,比如访问网络,就自动切换到其他的greenlet,等到IO操作完成,再在适当的时候切换回来继续执行。由于IO操作非常耗时,经常使程序处于等待状态,有了gevent为我们自动切换协程,就保证总有greenlet在运行,而不是等待IO。

本来想直接学习gevent的,由于gevent是基于greenlet实现,所以打算另开一篇博客学习greenlet,传送门

未完待续...

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一. 操作系统概念 操作系统位于底层硬件与应用软件之间的一层.工作方式: 向下管理硬件,向上提供接口.操作系统进行...
    月亮是我踢弯得阅读 6,038评论 3 28
  • 参考资料 http://www.gevent.org/contents.html https://uwsgi-do...
    JunChow520阅读 16,988评论 0 10
  • 协程 阅读目录 一 引子 二 协程介绍 三 Greenlet模块 四 Gevent模块 引子 之前我们学习了线程、...
    go以恒阅读 737评论 0 1
  • 必备的理论基础 1.操作系统作用: 隐藏丑陋复杂的硬件接口,提供良好的抽象接口。 管理调度进程,并将多个进程对硬件...
    drfung阅读 3,607评论 0 5
  • 一、总体内容 1.1、协程的介绍 1.2、迭代器以及迭代器的应用 1.3、生成器(生成器与迭代器保存的都是生成数据...
    IIronMan阅读 874评论 0 1