我正在尝试将一个使用ucontext的库移植到一个支持pthread但不支持ucontext的平台上。代码写得很好,所以用pthread例程的调用替换ucontext API的所有调用应该是相对容易的。然而,这是否会带来大量的额外开销?或者这是一个令人满意的替代品。我不确定ucontext如何映射到操作系统线程,这个工具的目的是让协程生成变得相当便宜和容易。
因此,问题是:用pthread调用替换ucontext调用会显著改变库的性能特征吗?
发布于 2013-01-01 02:32:26
pthread将使用系统调用,以及一些管理内存。它应该可以与ucontext相媲美,假设需要相同数量的系统调用(我会天真地用strace检查这一点)。
出于同样的原因,swapcontext()比使用一些longjmp技巧更慢(参见this page的讨论,其中作者声称他的应用程序的性能影响是7倍)。
我不是这方面的专家,但我使用协程spice-gtk开发了一个库,我们有使用ucontext/jmp、gthread或winfibers的后端。我没有注意到任何性能变化,但这可能是因为库通常是IO绑定的。
https://stackoverflow.com/questions/13144044
复制相似问题