python 并发编程 协程 协程介绍
2024-09-05 01:07:15
协程:是单线程下的并发,又称微线程,纤程。英文名Coroutine。一句话说明什么是线程:协程是一种用户态的轻量级线程,即协程是由用户程序自己控制调度的
需要强调的是:
1. python的线程属于内核级别的,即由操作系统控制调度(如单线程遇到io或执行时间过长就会被迫交出cpu执行权限,切换其他线程运行)
2. 单线程内开启协程,一旦遇到io,就会从应用程序级别(而非操作系统)控制切换,以此来提升效率(!!!非io操作的切换与效率无关)
对比操作系统控制线程的切换,用户在单线程内控制协程的切换
优点如下:
1. 协程的切换开销更小,属于程序级别的切换,操作系统完全感知不到,因而更加轻量级,效率比操作系统切换高
2. 单线程内就可以实现并发的效果,最大限度地利用cpu,
缺点如下:
1. 协程的本质是单线程下,无法利用多核,可以是一个程序开启多个进程,每个进程内开启多个线程,每个线程内开启协程
2. 协程指的是单个线程,因而一旦协程出现阻塞,将会阻塞整个线程
总结协程特点:
- 必须在只有一个单线程里实现并发
- 修改共享数据不需加锁
- 用户程序里自己保存多个控制流的上下文栈
- 附加:一个协程遇到IO操作自动切换到其它协程(如何实现检测IO,yield、greenlet都无法实现,就用到了gevent模块(select机制))
最新文章
- android源码修改,实现长按电源键直接关机
- MVC 请求处理流程(一)
- Linux覆盖率一点研究:获取覆盖率数据
- Postgresql 迁移随笔一
- oracle sqlplus存储过程控制台输出信息
- LINQ查询操作符之First、FirstOrDefault、Last、LastOrDefault、ElementAt、ElementAtOrDefault、Contains、Any、All、Coun
- seek指针大文件上传
- LINUX软件./configure 配置出现:configure: error: newly created file is older than distributed files!
- ExtJs combobox支持模糊匹配
- 使用mysql-proxy代理实现msyql数据库读写分离
- Esper学习之四:Context
- Linux编程之从零开始搭建RPC分布式系统
- redis单机主从搭建
- what is yaml ?
- 使用try-with-resources优雅的关闭IO流
- Monkey 生成报告方法
- Ubuntu 分辨率显示出错,分辨率不是最佳分辨率的解决办法
- Boolean数据类型
- java小学生四则运算带面板版 但我不知道为什么同类变量却进不了动作监听中去
- CORS support for ASP.NET Web API (转载)