协程

1. 协程,又称微线程,纤程。协程是用户自己控制的,CPU根本不知道协程的存在,CPU只认识线程。

2. 线程切换的时候,会保存在CPU的寄存器里面。

协程切换的时候,却都是由用户自己的实现的。

3。在单线程下实现并发的效果,就是通过协程来完成的。例如yield()

英文名Coroutine。一句话说明什么是线程:协程是一种用户态的轻量级线程

协程拥有自己的寄存器上下文和栈。协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈。

因此:

协程能保留上一次调用时的状态(即所有局部状态的一个特定组合),每次过程重入时,就相当于进入上一次调用的状态,换种说法:进入上一次离开时所处逻辑流的位置。

在单线程下实现并发的效果,就是通过协程来完成的。yield()

4.    协程的好处:

  • 无需线程上下文切换的开销
  • 无需原子操作锁定及同步的开销 (协程就是单线程)
    •   "原子操作(atomic operation)是不需要synchronized",所谓原子操作是指不会被线程调度机制打断的操作;这种操作一旦开始,就一直运行到结束,中间不会有任何 context switch (切换到另一个线程)。原子操作可以是一个步骤,也可以是多个操作步骤,但是其顺序是不可以被打乱,或者切割掉只执行部分。视作整体是原子性的核心。

解释:在线程中修改数据的时候,需要加锁。在协程中不用考虑锁的问题,因为协程本质上就是单线程。单线程

就是串行的。

  • 方便切换控制流,简化编程模型
  • 高并发+高扩展性+低成本:一个CPU支持上万的协程都不是问题(因为它们都是在一个线程里)。所以很适合用于高并发处理。

缺点:

  • 无法利用多核资源:协程的本质是个单线程,它不能同时将 单个CPU 的多个核用上,协程需要和进程配合才能运行在多CPU上。当然我们日常所编写的绝大部分应用都没有这个必要,除非是cpu密集型应用。(进程里面跑线程,线程里面跑协程)
  • 进行阻塞(Blocking)操作(如IO时)会阻塞掉整个程序

yield()是自己写的协程,Greenlet( )是已经封装好了的协程。

最新文章

  1. (转)TortoiseSVN客户端重新设置用户名和密码
  2. The index also can be used for LIKE comparisons if the argument to LIKE is a constant string that does not start with a wildcard character.
  3. android拨打电话
  4. PF_RING安装
  5. (转)Linux进程间通信
  6. LeetCode13 Roman to Integer
  7. ipc telnet 攻击
  8. Jqgrid入门-使用模态对话框编辑表格数据(三)
  9. 设置ListView每条数据之间的间隔
  10. ftp桥接到http服务
  11. 递归思路分解(C#)
  12. MAC图片格式转换
  13. Java 错误:找不到或无法加载主类
  14. H5+JS+JQuery+ECharts实现异步加载
  15. Xamarin 使用极光推送 详细教程
  16. logback 三
  17. vue+canvas踩坑之旅
  18. day03---基本数据类型、运算符、与用户交互
  19. jq文件上传及下载
  20. dfs常见的配置文件中的value与description(重要)

热门文章

  1. Servlet处理文件下载的编码问题,乱码。
  2. ansible基础配置使用(一)
  3. 「专题训练」k-Tree(CodeForces Round #247 Div.2 C)
  4. uvaoj 213 - Message Decoding(二进制,输入技巧)
  5. JMeter常用元器件
  6. vue watch监控对象
  7. Tunnel上传遇到字符[NUL]问题
  8. 国内版Office365实现MFA的方案(未完)
  9. POJ 1696 Space Ant(凸包变形)
  10. shiro控制登陆成功后跳回之前的页面