在C 中使用GOLANG的協程

2021-07-07 09:15:42 字數 1098 閱讀 3181

開源專案cpp_features提供了乙個仿golang協程的stackful協程庫. 可以在c++中使用golang的協程,大概語法是這樣的:

1 #include 2 

3 void foo()

4 7

8 co_main()

9

怎麼樣,語法是不是和golang很像? 以下是這個專案的readme

coroutine是乙個使用c++11編寫的排程式stackful協程庫, 同時也是乙個強大的並行程式設計庫 

目前支援兩個平台:

linux   (gcc4.8+)

win7-64bit (vs2013/2015)

使用coroutine編寫並行程式,即可以像golang、erlang這些併發語言一樣 

開發迅速且邏輯簡潔,又有c++原生的效能優勢,魚和熊掌從此可以兼得。

coroutine有以下特點: 

* 1.提供golang一般功能強大協程,基於corontine編寫**,可以以同步的方式編寫簡單的**,同時獲得非同步的效能, 

* 2.支援海量協程, 建立100萬個協程只需使用1gb記憶體 

* 3.允許使用者自由控制協程排程點,隨意變更排程執行緒數; 

* 4.支援多執行緒排程協程,極易編寫並行**,高效的並行排程演算法,可以有效利用多個cpu核心 

* 5.可以讓鏈結程序式的同步的第三方庫變為非同步呼叫,大大提公升其效能。 

再也不用擔心某些db官方不提供非同步driver了,比如hiredis、mysqlclient這種客戶端驅動可以直接使用,並且可以得到不輸於非同步driver的效能。 

* 6.動態鏈結和靜態鏈結全都支援,便於使用c++11的使用者靜態鏈結生成可執行檔案並部署至低版本的linux系統上。 

* 7.提供協程鎖(co_mutex), 定時器, channel等特性, 幫助使用者更加容易地編寫程式. 

* 8.網路效能強勁,超越asio非同步模型;尤其在處理小包和多執行緒並行方面非常強大。

coroutine/samples目錄下有很多示例**,內含詳細的使用說明,讓使用者可以循序漸進的學習coroutine庫的使用方法。

coroutine的編譯與使用:

rpc框架:

Lua中使用協程

前一段時間在寫遊戲裡的 介面,會用到計時器,所以學了一點關於lua中關於協程的用法,記錄下來給大家分享 首先我們要了解一下協程的生命週期,乙個協程有四種狀態 掛起 suspended 執行 running 死亡 dead 和正常 normal 我們先建立乙個簡單的協程 local co corout...

關於協程 nodejs和golang協程的不同

nodejs和golang都是支援協程的,從表現上來看,nodejs對於協程的支援在於async await,golang對協程的支援在於goroutine。關於協程的話題,簡單來說,可以看作是非搶占式的輕量級執行緒。一句話概括,上面提到了 可以看作是非搶占式的輕量級執行緒 在多執行緒中,把一段 放...

Golang的協程池設計

同一時刻可以處理多個事務 更加節省時間,效率更高 具有並行處理能力的程式我們稱之為 併發程式 併發程式的處理能力優勢體現在 gopool3.jpeg package main import fmt import time func go worker name string fmt.println ...