開源項目cpp_features提供了一個仿golang協程的stackful協程庫. 能夠在c++中使用golang的協程,大概語法是這樣的:mysql
1 #include <iostream> 2 3 void foo() 4 { 5 std::cout << "foo" << std::endl; 6 } 7 8 co_main() 9 { 10 go foo; 11 }
怎麼樣,語法是否是和golang很像? 如下是這個項目的ReadMelinux
coroutine是一個使用C++11編寫的調度式stackful協程庫, 同時也是一個強大的並行編程庫
目前支持兩個平臺:ios
Linux (GCC4.8+) Win7-64bit (VS2013/2015)
使用coroutine編寫並行程序,便可以像golang、erlang這些併發語言同樣
開發迅速且邏輯簡潔,又有C++原生的性能優點,魚和熊掌今後能夠兼得。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異步模型;尤爲在處理小包和多線程並行方面很是強大。git
若是你發現了任何bug、有好的建議、或使用上有不明之處,能夠提交到issue,也能夠直接聯繫做者:
email: 289633152@qq.com QQ交流羣: 296561497github
coroutine/samples目錄下有不少示例代碼,內含詳細的使用說明,讓用戶能夠按部就班的學習coroutine庫的使用方法。golang
Linux:
0.若是你安裝了ucorf,那麼你已經安裝過coroutine了,能夠跳過第1步.
1.使用CMake進行編譯安裝:redis
$ mkdir build $ cd build $ cmake .. -DCMAKE_BUILD_TYPE=RELEASE $ sudo make install
若是但願編譯可調試的版本, 只須要cmake那行命令變爲:算法
$ cmake ..
2.以動態連接的方式使用時,必定要最早連接libcoroutine.so,還須要連接libdl.so. 例如:sql
g++ -std=c++11 test.cpp -lcoroutine -ldl [-lother_libs]
3.以靜態連接的方式使用時,只需連接libcoroutine.a便可,不要求第一個被連接,但要求libc.a最後被連接. 例如:
g++ -std=c++11 test.cpp -lcoroutine -static -static-libgcc -static-libstdc++
Windows:
1.使用git submodule update –init下載子模塊
2.進入coroutine/win_patch/VS2015目錄, 打開coroutine.sln,沒必要編譯整個解決方案,只需編譯coroutine工程便可。其中的測試工程是依賴boost-x64的,若是要編譯請先編譯64bit的boost庫:
編譯參數:
bjam.exe address-model=64 --build-type=compelete
至少編譯system和thread兩個庫,而後調整工程設置中的引用boost的路徑
3.編譯coroutine項目(默認的工程配置暫時只配置了x64-Debug-mt版,須要其餘版本請自行修改工程配置)
4.使用時須要添加兩個include目錄:coroutine和coroutine/win_patch