cloudwu / coroutine

A asymmetric coroutine library for C.
MIT License
2.44k stars 686 forks source link

公用栈支持分组? #8

Open skywind3000 opened 6 years ago

skywind3000 commented 6 years ago

比如一个 schedule 里面有 100个 stack,每个 2MB,一共 200MB,每个栈,管理一组 coroutine 假设有 5000个 coroutine ,平均分布在 100组栈上,每组栈 50个 coroutine。

coroutine 被切走的时候,并不会马上拷贝栈,而会保留在那一个栈上,直到同一组的 coroutine 需要resume,才会把之前 on-stack 的 coroutine 拷贝走。

这样每个 stack 上保留的 coroutine 都是最近最活跃的 coroutine,栈拷贝的次数下降100倍。

Yuandong-Chen commented 6 years ago

@skywind3000 不如直接提个要求,造C语言的,优雅的Actor库更加实在。我肯定会直接选择erlang/elixir,或者java/akka。

qingdujun commented 4 years ago

这样需要额外的分组消耗;还需要记录当前没被切走的栈是谁的栈。

skywind3000 commented 4 years ago

这个记录比拷贝栈轻量级多了。

Prince-Hervoet commented 4 months ago

给每一个routine数据结构中加一个groupId?