在C++中使用golang的協程

開源項目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

coroutine的編譯與使用:

  • 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

網絡庫:

  • 基於coroutine編寫的網絡庫,在network目錄中,支持udp/tcp協議

RPC框架:

相關文章
相關標籤/搜索