zoukankan      html  css  js  c++  java
  • 在C++中使用golang的协程

    开源项目cpp_features提供了一个仿golang协程的stackful协程库. 可以在c++中使用golang的协程,大概语法是这样的:

     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很像? 以下是这个项目的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异步模型;尤其在处理小包和多线程并行方面非常强大。

    • 如果你发现了任何bug、有好的建议、或使用上有不明之处,可以提交到issue,也可以直接联系作者: 
      email: 289633152@qq.com QQ交流群: 296561497

    • coroutine/samples目录下有很多示例代码,内含详细的使用说明,让用户可以循序渐进的学习coroutine库的使用方法。

    coroutine的编译与使用:

    • Linux: 
      0.如果你安装了ucorf,那么你已经安装过coroutine了,可以跳过第1步. 
      1.使用CMake进行编译安装:

          $ mkdir build
          $ cd build
          $ cmake .. -DCMAKE_BUILD_TYPE=RELEASE
          $ sudo make install
      

      如果希望编译可调试的版本, 只需要cmake那行命令变为:

          $ cmake ..
      

      2.以动态链接的方式使用时,一定要最先链接libcoroutine.so,还需要链接libdl.so. 例如:

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

  • 相关阅读:
    Asp:Cookies应用指南
    asp:cookies的属性
    数据库压缩
    asp之servervariables全部显示
    sql语句操作表
    asp之FSO大全
    SQL语句
    vbscript语句
    asp之vbscript函数
    IDEA 2017web项目的创建
  • 原文地址:https://www.cnblogs.com/yyzybb/p/4985973.html
Copyright © 2011-2022 走看看