在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框架:

相关文章
相关标签/搜索