协程
协程
1. 协程介绍
协程又称微线程,从名字可以看出,协程的粒度比线程更小,并且是用户管理和控制的,多个协程可以运行在一个线程上面。那么协程出现的背景又是什么呢,先来看一下目前线程中影响性能的特性:
- 使用锁机制
- 线程间的上下文切换
- 线程运行和阻塞状态的切换
以上任意一点都是很消耗cpu性能的。相对来说协程是由程序自身控制,没有线程切换的开销,且不需要锁机制,因为在同一个线程中运行,不存在同时写变量冲突,在协程中操作共享资源不加锁,只需要判断状态就行了,所以执行效率比线程高的多。
2. 主流语言对协程的支持
Lua语言
Lua从5.0版本开始使用协程,通过扩展库coroutine来实现。
Python语言
python可以通过 yield/send 的方式实现协程。在python 3.5以后,async/await 成为了更好的替代方案。
Go语言
Go语言对协程的实现非常强大而简洁,可以轻松创建成百上千个协程并发执行。
Java语言
如上文所说,Java语言并没有对协程的原生支持,但是某些开源框架模拟出了协程的功能,有兴趣的小伙伴可以看一看Kilim框架的源码:
https://github.com/kilim/kilim
C/C++
c/c++需要自己借助ucontext、setjmp、longjmp库实现,微信开源了c/c++的协程库libco。
相关推荐
sunnyJam 2020-01-11
ddxygq 2019-12-30
jacktangj 2020-04-17
CloudXli 2020-04-07
oXiaoChong 2020-04-07
学习备忘录 2020-02-18
wyqwilliam 2020-02-10
ericxieforever 2020-09-03
efeve 2020-09-14
hohohogetitup 2020-06-19
Dimples 2020-06-08
鲁鲁酱 2020-06-02
feishicheng 2020-05-31
paopao00 2020-05-10
georgeandgeorge 2020-05-09
Greatemperor 2020-05-03
狼窝 2020-04-07