什么是orchid?
orchid是一個構建于強大的boost庫基礎上的C++庫,類似于python下的gevent/eventlet,為用戶提供基于協程的并發模型。
什么是協程:
協程,顧名思義,協作式程序,其思想是,一系列互相依賴的協程間依次使用CPU,每次只有一個協程工作,而其他協程處于休眠狀態。協程在控制離開時暫停執行,當控制再次進入時只能從離開的位置繼續執行。 協程已經被證明是一種非常有用的程序組件,不僅被python、lua、ruby等腳本語言廣泛采用,而且被新一代面向多核的編程語言如golang rust-lang等采用作為并發的基本單位。
協程可以被認為是一種用戶空間線程,與傳統的搶占式線程相比,有2個主要的優點:
- 與線程不同,協程是自己主動讓出CPU,并交付他期望的下一個協程運行,而不是在任何時候都有可能被系統調度打斷。因此協程的使用更加清晰易懂,并且多數情況下不需要鎖機制。
- 與線程相比,協程的切換由程序控制,發生在用戶空間而非內核空間,因此切換的代價非常的小。
green化
術語“green化”來自于python下著名的協程庫greenlet,指改造IO對象以能和協程配合。某種意義上,協程與線程的關系類似與線程與進程的關系,多個協程會在同一個線程的上下文之中運行。因此,當出現IO操作的時候,為了能夠與協程相互配合,只阻塞當前協程而非整個線程,需要將io對象“green化”。目前orchid提供的green化的io對象包括:
- tcp socket(還不支持udp)
- descriptor(目前僅支持非文件類型文件描述符,如管道和標準輸入/輸出,文件類型的支持會在以后版本添加)
- timer (定時器)
- signal (信號)
chan:協程間通信
chan這個概念引用自golang的chan。每個協程是一個獨立的執行單元,為了能夠方便協程之間的通信/同步,orchid提供了chan這種機制。chan本質上是一個阻塞消息隊列,后面我們將看到,chan不僅可以用于同一個調度器上的協程之間的通信,而且可以用于不同調度器上的協程之間的通信。
多核
建議使用的scheduler per cpu的的模型來支持多核的機器,即為每個CPU核心分配一個調度器,有多少核心就創建多少個調度器。不同調度器的協程之間也可以通過chan來通信。協程應該被創建在哪個調度器里由用戶自己決定。
進一步信息請閱讀doc目錄下tutorial。如果您發現任何bug或者有任何改進意見,請聯系 ioriiod0@gmail.com
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
