有没有一种方法可以在不使用调度程序的情况下使用pthread,以便只有当线程显式地放弃或者被 mutex/cond 阻塞时才发生上下文切换?如果没有,是否有一种方法可以最小化调度开销,从而尽可能减少强制上下文切换的次数?
该问题涉及 POSIX 线程在 Linux gcc/g++ 实现。
有没有一种方法可以在不使用调度程序的情况下使用pthread,以便只有当线程显式地放弃或者被 mutex/cond 阻塞时才发生上下文切换?如果没有,是否有一种方法可以最小化调度开销,从而尽可能减少强制上下文切换的次数?
该问题涉及 POSIX 线程在 Linux gcc/g++ 实现。
--enable-pthread
进行配置将创建一个用于pthreads
的插件替代品。我在我的Mac上构建并测试了这个库,对于简单的pthreads程序来说它工作得很好。如果您有一个在普通用户空间运行的进程,上下文切换将自然发生作为系统操作的一部分 - 总会有另一个需要 CPU 时间的进程。操作系统已经相当优化了线程之间的抢占式上下文切换,并且有时是必要的。
如果您真的遇到了过多上下文切换的问题,最好先调整 Linux 调度程序,这不是本主题讨论的范围。pthread_setschedprio 和 pthread_setschedparam 可以设置一些提示,但仅限于设置优先级,而这些优先级的解释是实现定义的,即由 Linux 调度程序决定。