协程:是单线程下的并发,又称微线程,纤程。英文名Coroutine。一句话说明什么是线程:协程是一种用户态的轻量级线程,即协程是由用户程序自己控制调度的

需要强调的是:

1. python的线程属于内核级别的,即由操作系统控制调度(如单线程遇到io或执行时间过长就会被迫交出cpu执行权限,切换其他线程运行)
2. 单线程内开启协程,一旦遇到io,就会从应用程序级别(而非操作系统)控制切换,以此来提升效率(!!!非io操作的切换与效率无关)

对比操作系统控制线程的切换,用户在单线程内控制协程的切换

优点如下:

1. 协程的切换开销更小,属于程序级别的切换,操作系统完全感知不到,因而更加轻量级,效率比操作系统切换高
2. 单线程内就可以实现并发的效果,最大限度地利用cpu,

缺点如下:

1. 协程的本质是单线程下,无法利用多核,可以是一个程序开启多个进程,每个进程内开启多个线程,每个线程内开启协程
2. 协程指的是单个线程,因而一旦协程出现阻塞,将会阻塞整个线程

总结协程特点:

  1. 必须在只有一个单线程里实现并发
  2. 修改共享数据不需加锁
  3. 用户程序里自己保存多个控制流的上下文栈
  4. 附加:一个协程遇到IO操作自动切换到其它协程(如何实现检测IO,yield、greenlet都无法实现,就用到了gevent模块(select机制))

最新文章

  1. android源码修改,实现长按电源键直接关机
  2. MVC 请求处理流程(一)
  3. Linux覆盖率一点研究:获取覆盖率数据
  4. Postgresql 迁移随笔一
  5. oracle sqlplus存储过程控制台输出信息
  6. LINQ查询操作符之First、FirstOrDefault、Last、LastOrDefault、ElementAt、ElementAtOrDefault、Contains、Any、All、Coun
  7. seek指针大文件上传
  8. LINUX软件./configure 配置出现:configure: error: newly created file is older than distributed files!
  9. ExtJs combobox支持模糊匹配
  10. 使用mysql-proxy代理实现msyql数据库读写分离
  11. Esper学习之四:Context
  12. Linux编程之从零开始搭建RPC分布式系统
  13. redis单机主从搭建
  14. what is yaml ?
  15. 使用try-with-resources优雅的关闭IO流
  16. Monkey 生成报告方法
  17. Ubuntu 分辨率显示出错,分辨率不是最佳分辨率的解决办法
  18. Boolean数据类型
  19. java小学生四则运算带面板版 但我不知道为什么同类变量却进不了动作监听中去
  20. CORS support for ASP.NET Web API (转载)

热门文章

  1. mysql数据库之表操作及字段约束条件
  2. Python 文件I/OⅢ
  3. C# 跨线程访问控件(MethodInvoker)
  4. sql 导入文件
  5. QT:在其他窗口中显示QMainWindow
  6. CSS3实现穿墙广告效果
  7. 关系型数据库(四),引擎MyISAM和InnoDB
  8. 使用git将代码上传到GitHub
  9. 17.Python print()函数高级用法
  10. 自定义IPython提示符