Libco 正在参加 2020 年度 OSC 中国开源项目评选,请投票支持!
Libco 在 2020 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
投票让它出道
已投票

软件简介

libco 是腾讯开源的一个有趣的协程基础库,仅有的几个函数接口  co_create/co_resume/co_yield  再配合 co_poll, 可以支持同步或者异步的写法,如线程库一样轻松,库里面提供了socket族函数的hook,

包含如下内容:

  1. pthread风格的coroutine接口封装

  2. 事件循环以及超时机制

  3. 基于glibc-2.17源码修改的一个swapcontext高性能汇编版本

  4. socket函数的coroutine hook,阻塞式的socket调用会直接切换为异步调用

适用场景:已有大量的同步调用网络库,例如HttpGet/Memcache_cli/..., 并基于这些函数实现了大量复杂的业务逻辑,它们跑在多进程或者多线程环境下,希望改造为异步服务

改造方法:在进程/线程内创建多个coroutine( 使用co_create ),每个routine内部enable_sys_hook, 业务逻辑代码移到routine里面执行,那你所有的同步代码立即自动切换为异步调用~

展开阅读全文

代码

评论 (0)

加载中
更多评论
发表了资讯
2016/10/30 00:00

揭秘:微信如何用 libco 支撑8亿用户

libco是微信后台大规模使用的c/c++协程库,2013年至今稳定运行在微信后台的数万台机器上。libco在2013年的时候作为腾讯六大开源项目首次开源,最近做了一次较大的更新。libco支持后台敏捷的同步风格编程模式,同时提供系统的高并发能力。 libco支持的特性 支持CGI框架,轻松构建web服务(New); 支持gethostbyname、mysql...

11
119
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
发表了博客
2018/04/14 20:32

libco之协程分析

代码来源 libco是微信网络框架svrkit/summer的协程库。在网络IO操作较多的服务下,协程能够帮助提高服务的并发。在进行网络io操作的时候,让出cpu,服务更多的请求。 重要的数据结构 更大的图,见https://drive.google.com/file/d/1hyxb-5kwo2ezX8iRj5wjh0dJNy5oZXjv/view?usp=sharing 协程上下文 上下文定义,实际上,在...

0
0
发表了博客
2018/02/22 22:57

libco hook原理简析

我们先看一下libco协程库的特性描述 libco的特性 无需侵入业务逻辑,把多进程、多线程服务改造成协程服务,并发能力得到百倍提升; 支持CGI框架,轻松构建web服务(New); 支持gethostbyname、mysqlclient、ssl等常用第三库(New); 可选的共享栈模式,单机轻松接入千万连接(New); 对于其第三点特性,支持g...

0
0
发表了博客
2018/02/22 22:55

libco协程原理简要分析

此文简要分析一下libco协程的关键原理。   在分析前,先简单过一些协程的概念,以免有新手误读了此篇文章。   协程是用户态执行单元,它的创建,执行,上下文切换,挂起,销毁都是在用户态中完成,对linux系统而言,其实协程和进程(注:在linux系统中,进程是拥有独立地址空间的线程)一样,都是CPU的执行单元,只是进...

0
0
发表了博客
2019/03/05 19:45

libco协程库上下文切换原理详解

缘起 libco 协程库在单个线程中实现了多个协程的创建和切换。按照我们通常的编程思路,单个线程中的程序执行流程通常是顺序的,调用函数同样也是 “调用——返回”,每次都是从函数的入口处开始执行。而libco 中的协程却实现了函数执行到一半时,切出此协程,之后可以回到函数切出的位置继续执行,即函数的执行可以被“拦...

0
0
发表了博客
2018/07/23 16:55

基于微信的libco实现php的协程扩展

php扩展cop (兼容php7) git clone https://github.com/qieangel2013/cop 基于libco简单实现的协程 /usr/local/php/bin/phpize ./configure --with-php-config=/usr/local/php/bin/php-config make && mak......

0
0
发表了博客
2016/11/07 17:33

【腾讯Bugly干货分享】揭秘:微信是如何用libco支撑8亿用户的

libco是微信后台大规模使用的c/c++协程库,2013年至今稳定运行在微信后台的数万台机器上。libco在2013年的时候作为腾讯六大开源项目首次开源,我们最近做了一次较大的更新,同步更新在https://github.com/tencent/libco 上。libco支持后台敏捷的同步风格编程模式,同时提供系统的高并发能力。...

1
7
发表了博客
2018/07/29 22:44

从 Protothreads 和 libco 看 C/C++ 实现的协程库

同步Synchronous,异步(Asynchronous),协程(coroutine) 同步的好处是逻辑流就是代码的控制流,易于编写。但是如果碰到阻塞请求,就会卡住,因此CPU利用率不高。当然操作系统可以进行进程/线程调度,但是又有一些上下文切换的开销。 异步的好处是当线程可以不用一直阻塞在IO请求上,返回的逻辑可以写在回调里。但是这样有...

0
0
发表于AI & 大数据专区
2016/11/24 18:59

协程技术研究

先记住一句话,子程序是协程的一种特例。 ## Python yield Python 中的 yield 保存一个 generator 函数的状态,generator 是一个特殊类型的迭代器(iterator) ``` Python import time def consumer(): r = '' while True: n = yield r print('[CONSUMER] Consuming %s...' % n) time.sleep(1) r = '200 OK' def produce...

0
7
发表于云计算专区
2019/02/04 07:30

Linux中的sleep、usleep、nanosleep、poll和select

点击上方“黑光技术”关注之 完美之道,不在无可增加,而在无可删减! 黑光技术专栏 Golang UnitTest单元测试 Golang官方依赖管理工具dep学习使用 Golang信号处理和如何实现进程优雅退出 golang的httpserver优雅重启...

0
1
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
暂无内容
0 评论
62 收藏
分享
返回顶部
顶部