paip.提升性能---协程“微线程”的使用.
paip.提升性能---协程的使用.
近乎无限并发的“微线程”
作者Attilax 艾龙, EMAIL:1466519819@qq.com
来源:attilax的专栏
地址:http://blog.csdn.net/attilax
协程,又称微线程和纤程等,Fiber,即纤程..协程有时也被叫做用户态线程..据说源于 Simula 和 Modula-2 语言(
现代编程语言基本上都有支持,比如 Lua、ruby
协程是用户空间线程,操作系统对其存在一无所知,所以需要用户自己去做调度,用来执行协作式多任务非常合适。其实用协程来做的东西,用线程或进程通常也是一样可以做的,但往往多了许多加锁和通信的操作。
协程有三个好处:
避免了传统的函数调用栈,使得无限递归成为可能
用户态的线程调度,极大降低上下文切换的开销,使得近乎无限并发的“微线程”成为可能
由于可以在用户态进行手工线程调度,这样可以避免锁机制
其实这里的“微线程”、纤程、协程,甚至用户态线程,其实可以理解为都是一码事,只是实现和概念的区别。
协程的优点:
1. 消耗小, 切换快, 一个进程可以创建成千上万个协程, Erlang.
2. 小任务顺序编程很符合人的思维方式, 规避纯异步编程中状态机的复杂性. 使得使用协程写的程序将更加的直观, 逻辑描述方便, 简化编程.纤程用于化异步为同步, 你可以进行一个异步操作以后就切换纤程,等到异步操作完成以后在切换回来,这样,在逻辑上相关的代码就可以写到一个函数里面,而不用人为的分到多个回调函数中。
3. 没有了线程所谓的安全问题, 避免锁机制
协程的缺点:
自己实现的协程不是语言原生支持的,不能像Erlang那样公平调度,也不能像Go语言那样自动扩展栈空间,所以是有一定局限性的。
4. 协程一般只支持所有的协程函数在一个线程里面跑. 无法充分利用多核CPU, 除非把所有的IO和计算操作都剥离成单独的线程.
kilim framework.
paip.提升性能---协程“微线程”的使用.相关推荐
- 以爬虫为例,单线程,协程,线程,进程之间性能的比较,原来协程可以这么快?
前言 因为刚刚学习到了协程,然后之前也对爬虫有一定的了解,所以打算结合之前学的线程和进程,和协程进行对比,看看它的性能到底有多高,在测试完成后,结果还是不错的!下面就直接上代码了,因为代码逻辑都比较简 ...
- php 多核cpu,paip.提升性能--多核cpu中的java/.net/php/c++编程
paip.提升性能--多核cpu中的java/.net/php/c++编程 作者Attilax 艾龙, EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http ...
- 协程和线程的区别、协程原理与优缺点分析、在Java中使用协程
文章目录 什么是协程 协程的优点与缺点 协程实现原理. 协程与线程在不同编程语言的实现 在Java中使用协程 Kilim介绍 Kilim整合Java,使用举例 小总结 什么是协程 相对于协程,你可能对 ...
- python协程和线程区别_python 协程 及其与python多线程的区别和联系
协程(coroutine)又称微线程,纤程,是种用户级别的轻量级线程. 协程拥有自己的寄存器上下文和栈.协程调度切换时候,将寄存器上下文和栈保存到其他地方,等待切换回来的时候恢复,并从之前保存的寄存器 ...
- Go 面试官:什么是协程,协程和线程的区别和联系?
大家好,我是煎鱼. 最近金三银四,是面试的季节.在我的 Go 读者交流群里出现了许多小伙伴在讨论自己面试过程中所遇到的一些 Go 面试题. 今天的男主角,是工程师的必修技能,那就是 "什么是 ...
- 协程相比线程到底好在哪里?
协程虽然被提出的时间很早,但是使用它的年限很短.尤其是最近几年,随着 Go.Lua 等语言的流行,把协程推向了一个新的高潮. 在所有语言中都存在着层级调用,比如 A 调用 B,B 在执行过程中又调用了 ...
- 抽丝剥茧聊Kotlin协程之协程与线程之间的区别
1. 前言 关于协程,可能大家最经常听到的一句话就是"协程是轻量级的线程".一脸懵逼,有没有?这可是官方的slogan,严格意义上讲,一方面官方是想让大家把协程和线程产生一个直观关 ...
- 什么是协程,协程和线程的区别和联系?
1 进程 进程是什么 进程是操作系统对一个正在运行的程序的一种抽象,进程是资源分配的最小单位. 进程在操作系统中的抽象表现 为什么有进程 为什么会有 "进程" 呢?说白了还是为了合 ...
- paip. 提升性能---hibernate的缓存使用 总结
paip. 提升性能---hibernate的缓存使用 总结 作者Attilax 艾龙, EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog ...
- 协程 vs 线程 demo
2019独角兽企业重金招聘Python工程师标准>>> 协程 vs 线程 demo 博客分类: java package my; import java.util.concurren ...
最新文章
- Qt学习笔记,Qt程序架构设计要旨
- PHP 5.6 Apache配置
- VTK:小部件之ImageTracerWidget
- java 如何导出json文件_java导出json格式文件的示例代码
- 没有bug队——加贝——Python 练习实例 19,20
- mysql 存储过程实际应用,mysql 存储过程应用实例
- Microsoft SharePoint Server 2010 简体中文版及相关资源
- 鸿蒙第三代手机,华为第三代折叠屏手机面市 余承东披露今年4月旗舰机启用鸿蒙系统...
- MATLAB dir函数文件名排序问题
- C语言程序设计——计算图形面积(圆形,矩形,三角形,梯形)
- 图集压缩格式设置ASTC不生效的原因
- 空间相册显示服务器错误,空间相册服务器繁忙
- springboot整合autopoi-web文件导出Excel,使用注解配置一多
- JavaWeb,使用servlet/jsp时页面跳转的两种方式:转发和重定向
- mac单节点安装Erda实践
- C语言中%*s,%*c (还有%*.*s)
- Github 爆火!5000张表情包收藏了!!
- 书,是人类进步的阶梯。当当购书优惠码限时抢!
- win8.1软件打不开
- 《洞悉敏捷》黄喆:谈谈不同敏捷方法背后的核心精神