Replies: 5 comments
-
go() 创建的协程会均匀的分配到不同的调度线程中。如果用户想让某些协程运行在同一个线程下,可以用下面的方式创建协程: auto s = co::next_scheduler();
s->go(f1);
s->go(f2); 如果用户想在所有的调度线程中创建协程,可以用下面的方式: auto& s = co::all_schedulers();
for (size_t i = 0; i < s.size(); ++i) {
s[i]->go(f);
} 用户可以用上述方式,自行控制协程在哪个线程调度,协程一旦绑定到一个线程中,之后就不能切换到其他线程。 |
Beta Was this translation helpful? Give feedback.
-
若是一地图一协程,玩家聚集在哪些地图不能完全预测,不能做到CPU核心负载的均匀分布,才提出这个问题 这就涉及到一个调度器的繁忙采样,以处理负载问题 |
Beta Was this translation helpful? Give feedback.
-
co 提供了 用户可以利用上面的接口,自行设计调度算法。 业界大部分调度算法,需要事先知道任务权重,目前似乎并没有较好的权重无关的 CPU 负载均衡算法。 |
Beta Was this translation helpful? Give feedback.
-
这个问题是不是可以理解为添加动态负载均衡的需求 |
Beta Was this translation helpful? Give feedback.
-
work steal 没那么容易实现,后面可能考虑它的一种变种算法 |
Beta Was this translation helpful? Give feedback.
-
是否支持协程在不同的线程之间调度?
大概看了下代码,协程一旦创建,就与某个调度器绑定
另外如果用了socket则与调度器的iocp也会绑定
目前设想一种情况:
一个游戏服务器,每个游戏地图一个协程,用来处理业务
那么人多的地图必然CPU占用高,若恰巧多个协程从属于同一个调度器且CPU使用较高,则会产生瓶颈
效果就是有的调度器很闲,有的很忙
那么是否有可能让不同的协程根据需要被不同的线程调度呢?
可以加一些附加条件,比如win下不得使用socket,(epoll是否绑定不了解)
比如对coroutine做一个标记,若从未使用过线程绑定的功能,则允许脱离调度器并绑定新的调度器
即向sche添加attach task和detach task功能
谢谢
Beta Was this translation helpful? Give feedback.
All reactions