微信后台phxrpc协程库理解(提取协程相关源码)

简介: 微信后台phxrpc协程库理解(提取协程相关源码)

源码来自https://github.com/Tencent/phxrpc


我把协程相关的源码提取出来,写了个测试程序(仿造https://github.com/cloudwu/coroutine/blob/master/main.c),便于理解:


看runtime_.Resume(id)这一行,就是执行当前的协程,这个协程在创建的时候被定位到执行关联的函数处,这个具体实现在uthread_context_system.cpp中,所以当runtime_.Resume(id)时候其实就是执行foo函数。

//https://github.com/Tencent/phxrpc
//https://www.jianshu.com/p/4d95eb7af24b
#include "uthread_runtime.h"
#include <functional>
phxrpc::UThreadRuntime *runtime_;
static void foo(int arg) {
    int start = arg;
    for (int i = 0; i < 5; i++)
    {
        printf("coroutine %d : %d\n",  runtime_->GetCurrUThread(), start + i);
        runtime_->Yield();//放弃
    }
}
static void test() {
    int arg1 = { 0 };
    int arg2 = { 100 };
    int co1 = runtime_->Create(std::bind(&foo, arg1), nullptr);
    int co2 = runtime_->Create(std::bind(&foo, arg2), nullptr);
    printf("main start\n");
    while (!runtime_->IsAllDone())
    {
        runtime_->Resume(co1);//执行
        runtime_->Resume(co2);
        printf("GetUnfinishedItemCount:%d\n", runtime_->GetUnfinishedItemCount());
    }
    printf("main end\n");
}
int main(int argc, char *argv[])
{
    runtime_ = new phxrpc::UThreadRuntime(8192, false);
    test();
    delete runtime_;
    return 0;
}


运行结果是:


main start
coroutine 0 : 0
coroutine 1 : 100
GetUnfinishedItemCount:2
coroutine 0 : 1
coroutine 1 : 101
GetUnfinishedItemCount:2
coroutine 0 : 2
coroutine 1 : 102
GetUnfinishedItemCount:2
coroutine 0 : 3
coroutine 1 : 103
GetUnfinishedItemCount:2
coroutine 0 : 4
coroutine 1 : 104
GetUnfinishedItemCount:2
GetUnfinishedItemCount:0
main end

完整的工程下载地址是:https://download.csdn.net/download/libaineu2004/10874580


另外推荐一个案例:


coroutine example, using phxrpc coroutine framework, receive data from upstream and set redis, qps 12w


https://download.csdn.net/download/hintonic/10758106



---


参考文献:


https://www.jianshu.com/p/4d95eb7af24b


https://github.com/Tencent/libco


https://github.com/cloudwu/coroutine/ 云风


https://github.com/Nickqiaoo/coroutine 带注释的版本


https://blog.csdn.net/LMFQYJ/article/details/79211084  云风coroutine源码分析


https://blog.csdn.net/Swartz2015/article/details/76274688  从云风的coroutine库学习协程


相关文章
|
16天前
|
XML Java Android开发
微信虚拟视频插件安卓,微信虚拟相机替换拍照,java源码分享
完整的相机应用项目包含三个主要文件:主活动实现、布局文件和清单文件。代码实现了相机预览、
|
3天前
|
API 数据安全/隐私保护 开发者
企业微信自动加好友软件,导入手机号批量添加微信好友,python版本源码分享
代码展示了企业微信官方API的合规使用方式,包括获取access_token、查询部门列表和创建用户等功能
|
28天前
|
存储 缓存 运维
微信读书十周年,后台架构的技术演进和实践总结
微信读书经过了多年的发展,赢得了良好的用户口碑,后台系统的服务质量直接影响着用户的体验。团队多年来始终保持着“小而美”的基因,快速试错与迭代成为常态。后台团队在日常业务开发的同时,需要主动寻求更多架构上的突破,提升后台服务的可用性、扩展性,以不断适应业务与团队的变化。
56 0
|
29天前
|
监控 数据可视化 BI
微信计数器统计工具,QQ统计器手机APP,通过autojs实现后台
这是一款基于AutoJS的微信/QQ新增好友监控脚本,具备后台运行、自动统计每日新增好友数量、生成简单报表及定时提醒功能。
|
7月前
|
Android开发 开发者 Python
手撸了一个全自动微信清粉小工具(源码详解)
微信清理僵尸粉工具利用Python和`uiautomator2`库,通过模拟转账操作自动检测并标记微信好友列表中被删除、被拉黑或账号存在问题的“僵尸粉”。工具支持开启调试模式、自动打开微信、获取好友信息、判断好友状态、管理标签等功能,最终将检测结果记录到文件中,便于用户管理和清理好友列表。此工具适用于Android设备,已在OPPO Reno4 Pro上测试成功。
450 5
|
3月前
|
小程序 Java 关系型数据库
weixin163基于微信小程序的校园二手交易平台系统设计与开发ssm(文档+源码)_kaic
本文介绍了一款基于微信小程序的校园二手物品交易平台的开发与实现。该平台采用Java语言开发服务端,使用MySQL数据库进行数据存储,前端以微信小程序为载体,支持管理员和学生两种角色操作。管理员可管理用户、商品分类及信息、交易记录等,而学生则能注册登录、发布购买商品、参与交流论坛等。系统设计注重交互性和安全性,通过SSM框架优化开发流程,确保高效稳定运行,满足用户便捷交易的需求,推动校园资源共享与循环利用。
|
4月前
|
小程序 Java 关系型数据库
weixin116大学生就业平台微信小程序+ssm(文档+源码)_kaic
本文介绍了一款大学生就业平台微信小程序的开发过程,涵盖开发环境、系统设计、实现与测试等方面。该小程序基于微信平台特性,采用MYSQL数据库存储数据,确保系统稳定与安全,同时满足学生、企业和管理员不同权限用户的功能需求。通过简化操作流程,实现了招聘信息查看、简历投递等实用功能,旨在为用户提供便捷高效的求职体验,符合“操作简单,功能实用”的设计理念。
|
3月前
|
小程序 关系型数据库 Java
weixin168“返家乡”高校暑期社会实践微信小程序设计与开发ssm(文档+源码)_kaic
本文探讨高校暑期社会实践微信小程序的开发与应用,旨在通过信息化手段提升活动管理效率。借助微信小程序技术、SSM框架及MySQL数据库,实现信息共享、流程规范和操作便捷。系统涵盖需求分析、可行性研究、设计实现等环节,确保技术可行、操作简便且经济合理。最终,该小程序可优化活动发布、学生信息管理和心得交流等功能,降低管理成本并提高工作效率。
|
5月前
|
小程序 JavaScript Java
基于SpringBoot的智慧停车场微信小程序源码分享
智慧停车场微信小程序主要包含管理端和小程序端。管理端包括停车场管理,公告信息管理,用户信息管理,预定信息管理,用户反馈管理等功能。小程序端包括登录注册,预约停车位,停车导航,停车缴费,用户信息,车辆信息,钱包充值,意见反馈等功能。
217 5
基于SpringBoot的智慧停车场微信小程序源码分享
|
6月前
|
JavaScript
jQuery+HTML5实现的微信大转盘抽奖源码
这是一款基于jQuery+HTML5实现的微信大转盘抽奖效果源码,是一款可配置奖品抽奖的jQuery大转盘抽奖代码,可实现点击按钮转轮旋转实现抽奖功能,效果逼真自然,代码里面有详细的注释,可以修改文字或者二次开发都可以
168 11

热门文章

最新文章