協程

協程

1. 協程介紹

協程又稱微線程,從名字能夠看出,協程的粒度比線程更小,而且是用戶管理和控制的,多個協程能夠運行在一個線程上面。那麼協程出現的背景又是什麼呢,先來看一下目前線程中影響性能的特性:python

  • 使用鎖機制
  • 線程間的上下文切換
  • 線程運行和阻塞狀態的切換

以上任意一點都是很消耗cpu性能的。相對來講協程是由程序自身控制,沒有線程切換的開銷,且不須要鎖機制,由於在同一個線程中運行,不存在同時寫變量衝突,在協程中操做共享資源不加鎖,只須要判斷狀態就好了,因此執行效率比線程高的多。c++

2. 主流語言對協程的支持

Lua語言git

Lua從5.0版本開始使用協程,經過擴展庫coroutine來實現。github

Python語言微信

python能夠經過 yield/send 的方式實現協程。在python 3.5之後,async/await 成爲了更好的替代方案。併發

Go語言框架

Go語言對協程的實現很是強大而簡潔,能夠輕鬆建立成百上千個協程併發執行。async

Java語言性能

如上文所說,Java語言並無對協程的原生支持,可是某些開源框架模擬出了協程的功能,有興趣的小夥伴能夠看一看Kilim框架的源碼:線程

https://github.com/kilim/kilim

C/C++

c/c++須要本身藉助ucontext、setjmp、longjmp庫實現,微信開源了c/c++的協程庫libco。

相關文章
相關標籤/搜索