我试图将使用ucontext的库移植到支持pthreads但不支持ucontext的平台。代码编写得非常好,因此用pthread例程调用替换对ucontext API的所有调用应该相对容易。然而,这是否会带来大量额外的开销?或者这是一个令人满意的替代品。我不确定ucontext是如何映射到操作系统线程的,这个工具的目的是使协同程序生成变得相当便宜和容易。
所以,问题是:用pthread调用替换ucontext调用会显著改变库的性能特征吗?

最佳答案

pthread将使用系统调用和少量的管理内存。假设需要相同数量的系统调用,那么它应该可以与ucontext相媲美(我会天真地用strace检查这一点)。
出于同样的原因,swapcontext()比使用一些longjmp技巧慢(参见this page了解作者声称对其应用程序的性能影响为7倍的讨论)。
我不是这方面的专家,但我使用coroutines spice gtk开发了一个库,我们有使用ucontext/jmp、gthread或winfibers的后端。我没有注意到任何性能变化,但那可能是因为lib通常是IO绑定的。

09-08 10:29