c++协程库libfiber之3:调度协程的三种方式

简洁

前一篇博客介绍了libfiber里使用协程的简单方法,这里介绍下调度协程的三种方式

自动调度,立即执行

这种模式下,创建的协程会被立即执行,协程结束后才返回创建处的代码逻辑。

void schedule_two(void) {
	acl::fiber::init(acl::FIBER_EVENT_T_KERNEL, true); //指定事件类型,自动调度,注意第二个参数

	for (int i = 0; i < 10; i++) {
		go[&] { fiber1(i); };
		printf("after create fiber-%d\n", i);
	}
}

在这种模式下,最顶层的代码同一时刻只能创建一个协程,协程结束后再创建另一个。但是可以在协程里继续创建子协程。等所有协程都消亡后,才返回主业务流程。

先指定事件类型,最后统一调度

本模式下创建完所有协程后才调度。

void schedule_bench(int nfiber, int nloop) {
	acl::fiber::init(acl::FIBER_EVENT_T_KERNEL, false);  //指定事件类型,但是不自动调度,注意第二个参数

	long long count = 0;
	for (int i = 0; i < nfiber; i++) {
		go[&] { fiber2(nloop, count); };
	}

	printf("scheduleing\r\n\n");
	acl::fiber::schedule(); //调度协程
}

创建完毕后统一指定支持的事件类型并调度

这种写法和上面那种等效。

void schedule_one(void) {
	std::vector<acl::fiber*> fibers;
	for (int i = 0; i < 10; i++) {
		go[&] { fiber1(i); };
	}

	acl::fiber::schedule_with(acl::FIBER_EVENT_T_KERNEL); //调度协程
}

上述代码先创建一批协程,然后才开始调度,并指定支持的事件类型。

总结

我个人感觉最后一种最简洁,也最常用。

参考资料

c++协程库libfiber之2:编译及例子

c++协程库libfiber之1:简单介绍

libfiber的源码工程主页

libfiber的贡献者爱奇艺的技术分享:爱奇艺网络协程编写高并发应用实践

ACL作者介绍libfiber的博客:acl开发–协程篇

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值