yyzybb537 / libgo

Go-style concurrency in C++11
MIT License
3.18k stars 754 forks source link

提供创建高优先级(被立刻调度的)协程的接口 #274

Open TKONIY opened 2 years ago

TKONIY commented 2 years ago

brpc 的bthread中提供一个bthread_start_urgent接口,可以启动一个协程后立即将它swap in当前的线程上执行。这种接口的应用场景是新的协程要读写当前线程上的数据时,可以让他拥有更好的cache locality。 libgo我阅读了一下发现并没有提供类似的接口,请问是否有这样的接口以及是否可以考虑增加一个呢?我非常乐意参与到接口的开发上。

TKONIY commented 2 years ago

现在离实现这个功能最接近的方式是调用go新建协程然后yield当前协程出去,但这样并不能保证新的协程立刻被swap in执行,还需要等待processor调度完它前面的协程再将其从queue中拿出来运行,浪费了很多时间并且也不一定能保证新协程不被steal走。

yyzybb537 commented 2 years ago

很好的主意,后续会考虑实现