Stackful 协程库 libgo

MIT
C/C++
跨平台
魅族
2016-01-25
Li_Mr

libgo 是一个使用 C++ 编写的协作式调度的stackful协程库, 同时也是一个强大的并行编程库。

设计之初是为高并发分布式Linux服务端程序开发提供底层框架支持,可以让链接进程序的同步的第三方库变为异步库,不影响逻辑的前提下提升其性能

目前支持两个平台:

  • Linux (GCC 4.8+)

  • Windows (Win7、Win8、Win10 x86 and x64 使用VS2013/2015编译)

使用libgo编写并行程序,即可以像golang一样开发迅速且逻辑简洁,又有C++原生的性能优势。

  • 1.提供golang一般功能强大协程,基于corontine编写代码,可以以同步的方式编写简单的代码,同时获得异步的性能

  • 2.支持海量协程, 创建100万个协程只需使用2GB内存

  • 3.允许用户自由控制协程调度点,随时随地变更调度线程数;

  • 4.支持多线程调度协程,极易编写并行代码,高效的并行调度算法,可以有效利用多个CPU核心

  • 5.可以让链接进程序的同步的第三方库变为异步调用,大大提升其性能。再也不用担心某些DB官方不提供异步driver了,比如hiredis、mysqlclient这种客户端驱动可以直接使用,并且可以得到不输于异步driver的性能。

  • 6.动态链接和静态链接全都支持,便于使用C++11的用户静态链接生成可执行文件并部署至低版本的linux系统上。

  • 7.提供协程锁(co_mutex), 定时器, channel等特性, 帮助用户更加容易地编写程序.

  • 8.网络性能强劲,在Linux系统上超越ASIO异步模型;尤其在处理小包和多线程并行方面非常强大

  • 在源码的samples目录下有很多示例代码,内含详细的使用说明,让用户可以很轻易地学会使用libgo。

#include <stdio.h>
#include <libgo/coroutine.h>

co_main(int argc, char **argv)
{
    go []{
        printf("1\n");
        co_yield;
        printf("2\n");
    };

    go []{
        printf("3\n");
        co_yield;
        printf("4\n");
    };

    return 0;
}
加载中

评论(6)

咚往咚来
咚往咚来
不明觉厉啊 #libgo#
libGod
libGod
channel的实现有待改善 #libgo#
霡霂
霡霂
感觉设计好强大啊 #libgo#
心情
有没有人将它用到生产环境中 #libgo#
calvinwilliams
calvinwilliams
强大。和epoll比优劣势如何? #libgo#
OSC首席键客
OSC首席键客
卧槽! #libgo#

Libgo v2.6 发布,Stackful 协程库

v2.6 是libgo针对HTTP优化的版本,用于类似于HTTP这种半双工协议的场景时,性能相比上一个版本提升100% 主要变更: ##HOOK * 增加安全signal的功能, 可以让signal在Run中触发, 编译时需使用参...

2016/10/20 17:12

Libgo v2.4-stable 发布,Stackful 协程库

Libgo v2.4-stable 发布了。 Libgo : https://github.com/yyzybb537/libgo v2.4-stable是libgo的第一个稳定版,经过了线上环境的大规模考验,也修复了很多线上测试过程中发现的bug。 目前有2...

2016/06/03 00:02

libgo v2.3 发布,Stackful 协程库

libgo v2.3 发布,更新内容: 重构IO层的Hook代码,通过跟踪socket状态的方式优化掉额外的系统调用,IO性能再次提升30%左右 支持共享监听端口的多进程服务器的使用方式 增加一个接口set_con...

2016/04/18 12:08

没有更多内容

加载失败,请刷新页面

没有更多内容

暂无问答

Why c++ coroutine?Why libgo?

讲述C++协程的近况、设计与实现中的细节与决策

05/23 13:13
4.7K
12
【源创专访】魅族高级工程师于洋子:服务端架构设计与开发,数年磨一剑

淡泊明志,宁静致远。技术行业,尤其是选择服务端开发方向,绝不是可以速成的,一定要抱着数年磨一剑的心态去深入探索,才能有所斩获。——于洋子如是说

2016/09/26 17:07
4.7K
11
魅族 C++ 微服务框架技术内幕揭秘

kiev,是魅族科技推送平台目前使用的C++后台开发框架。2012年,魅族的推送业务刚刚有一点从传统架构向微服务架构转型的意识萌芽,为了在拆分系统的同时提高开发效率,决定做一个C++开发框架,...

2016/09/29 08:03
6.5K
16
ODB(C++ ORM)用Mingw的完整编译过程

用mingw官方的GCC4.7.2编译libodb后,并用odb compiler对hello示例生成odb的"包裹"代码,编译链接总是不能通过,下面是编译example/hello报错的信息如下: libodb-sqlite-2.3.0/odb/sqlite -o d...

2013/12/14 14:46
835
0
深入理解事件驱动与协程概念

从IO讲起 应用独占式 在计算机发展的初期,每个应用都是独占式的,没有OS进行调度,每次只加载一个进程,学过单片机的朋友应该有过这样的体验,例如常用的8086系列芯片,我当时学习微机原理课...

08/24 22:10
18
0
python 抓取开源中国上阅读数大于 1000 的优质文章

Python 现在越来越火,连小学生都在学习 Python了 ^ ^,为了跟上时代,赶个时髦,秉承活到老学到老的精神,慢慢也开始学习 Python;理论是实践的基础,把 Python 相关语法看了,就迫不及待,...

08/26 16:57
935
5
协程分析之context上下文切换

协程现在已经不是个新东西了,很多语言都提供了原生支持,也有很多开源的库也提供了协程支持。 最近为了要给tbox增加协程,特地研究了下各大开源协程库的实现,例如:libtask, libmill, boo...

2016/10/28 23:40
166
0
为什么除了Go语言, 其他类C语言都是垃圾[翻译][转]

英文原文: - [http://www.syntax-k.de/projekte/go-review](http://www.syntax-k.de/projekte/go-review) 原始翻译: - [http://www.mikespook.com/2011/06/go%E7%BC%96%E7%A8%8B%E8%AF%AD%E...

2013/04/06 14:15
7.3K
3

没有更多内容

加载失败,请刷新页面

没有更多内容

返回顶部
顶部