Libco 协程的生命周期 创建协程(Creating coroutines) 前文已提到,libco 中创建协程是 co_create() 函数。函数声明如下: 1 int co_create( stCoRoutine_t **co,const stCoRoutineAttr_t *attr,vo ...
转载 2021-07-18 22:59:00
302阅读
2评论
导论 使用 C++ 来编写高性能的网络服务器程序,从来都不是件很容易的事情。在没有应用任何网络框架,从 epoll/kqueue 直接码起的时候尤其如此。即便使用 libevent, libev 这样事件驱动的网络框架去构建你的服务,程序结构依然不会很简单。为何会这样?因 为这类框架提供的都是非阻塞 ...
事件驱动与协程调度 协程的“阻塞”与线程的“非阻塞” 生产者消费者模型 1 /* 2 * Tencent is pleased to support the open source community by making Libco available. 3 4 * Copyright (C) 20 ...
引言 poll是libco中所有hook后的函数中可以说是最重要的一个,因为我们不但可以这个函数来隐式的转移CPU执行权,而且其他hook后的函数还可以使用这个hook后的poll在不切换线程的情况下去监听套接字,并在超时或者套接字有事件到来的时候唤醒这个调用poll的协程。 在example_co ...
转载 2021-07-22 23:01:00
184阅读
2评论
引言poll是libco中所有hook后的函数中可以说是最重要的一个,因为我们不但可以这个函数来隐式的转移CPU执行权,而且其他hook后的函数还可以使用这个ho
原创 2022-07-11 09:13:18
149阅读
 引言poll是libco中所有hook后的函数中可以说是最重要的一个,因为我们不但可以这个函数来隐式的转移CPU执行权,而且其他hook后的函数还可以使用这个hook后的poll在不切换线程的情况下去监听套接字,并在超时或者套接字有事件到来的时候唤醒这个调用poll的协程。在example_cond.cpp中我们也可以看到使用poll去切换执行权的操作,也正因为此,我们才得以完成使用一
转载 2023-11-07 11:56:33
51阅读
引言 我们总能在运行libco协程代码的最后看到对于函数co_eventloop的调用,它可以理解为主协程执行的函数。我们举一个简单的例子来说明它的作用: 1 void* routinefun(void* args){ 2 co_enable_hook_sys(); 3 while(true){ 4 ...
转载 2021-07-22 22:38:00
310阅读
2评论
文章目录引言基类1.1 comac_argc1.2 repeat2. implement2.1 reference2.2 function总结引言libco中提供了一份闭包的实现,根据这份实现
原创 2022-07-11 09:18:54
105阅读
引言 在探究这个机制之前我们先来看看libco为什么被腾讯的工程师们创造出来。 如今微信已经是一个月活近12亿的现象级软件,不可否认其背后的技术架构一定是首屈一指的。但是罗马不是一日建成的。实际在微信运行之初其并发能力并不是像现在一样。事实上当时大部分模块都采用了半同步半异步模型。接入层为异步模型, ...
转载 2021-07-20 15:39:00
309阅读
2评论
基础知识 首先我们来看下栈帧的定义: In C and modern CPU design conventions, the stack frame is a chunk of memory, allocated from the stack, at run-time, each time a fu ...
我经常会思考一个问题,即什么才算是一个好的代码?我
原创 2022-07-01 00:30:22
57阅读
引言我们总能在运行libco协程代码的最后看到对于函数co_eventloop的调用,它可以理解为主协程执行的函数。我们举一个简单的例子来说明它的作用
原创 2022-07-11 09:11:21
146阅读
c语言本身并不支持协程原语。但是依然有其他方式可以实现协程。我们拿libco库来分析,看看如何支持协程的。首先基本的协程概念,大家应该清晰。libco最核心的也是co_resume,co_yield两个operation。根据出让权调配的方式,我们可以把协程分为对称协程和非对称协程。根据协程切换时,是否保留恢复协程栈帧的行为来看,我们又可以把协程分为有栈协程和无栈协程。libco 根据上面的划分,
原创 2022-03-16 15:45:49
786阅读
Libco: 简化并发编程,Libco让高性能触手可及- 精选真开源,释放新价值。 概览 Libco是由腾讯开源的C/C++协程库,自2013年起在微信后台服务中得到广泛应用。它通过少量的函数接口,使得开发者能够轻松地将同步的后端服务转换为协程服务,从而实现卓越的并发性能。Libco的设计理念是让开发者能够以同步的方式编写代码,而执行时却能以异步的方式运行,极大地简化了并发编程的复杂性。 主要
原创 2024-06-15 12:11:12
197阅读
引言在探究这个机制之前我们先来看看libco为什么被腾讯的工程师们创造出来。如今微信已经是一个月活近12亿的现象级软件,不可否认其背后的技术架构一定
原创 2022-07-11 09:22:25
252阅读
引言libco是一个微信后台大规模使用的c/c++协程库,在2013年开源,据说2013至今仍运行在微信的后台中。正文对libco的学习过程实
原创 2022-07-11 09:26:15
127阅读
引言 协程 yield 和 resume 的第三种情况,也就是会发生协程切换的第三种情况,即调用 read(), write() 等 I/O 操作而陷入 “阻塞”和最后又恢复执行的过程,需要注意的是, 这里的“阻塞”依然是用户态实现的过程。我们知道,libco 的协程是在底层线程上串行 执行的。如果 ...
转载 2021-07-23 10:53:00
310阅读
2评论
引言我挑选了几个比较有代表性的hook后的函数来说明hook后的函数具体干了什么,其他的函数也基本是大同小异。
原创 2022-07-11 09:11:39
56阅读
1.libco简介 libco是微信后台大规模使用的c/c++协程库,2013年至今稳定运行在微信后台的数万台机器上,使得微信后端服务能同时hold大量请求,被誉为微信服务器稳定性的基石。libco在2013年的时候作为腾讯六大开源项目首次开源。libco源码地址 libco首先能解决CPU利用率与 ...
转载 2021-07-23 16:56:00
419阅读
2评论
引言 生产者消费者模型 1 #include <unistd.h> 2 #include <stdio.h> 3 #include <stdlib.h> 4 #include <queue> 5 #include "co_routine.h" 6 using namespace std; 7 str ...
  • 1
  • 2
  • 3