Lit*_*les 3 linux multithreading pthreads
有没有一种方法可以在没有调度程序的情况下使用pthreads,因此只有当线程显式屈服或在互斥体/条件上被阻塞时才会发生上下文切换?如果没有,是否有办法最小化调度开销,以便尽可能少地发生强制上下文切换?
问题涉及 POSIX 线程的 Linux gcc/g++ 实现。
您可以使用 Pth(又名GNU Portable Threads),一个非抢占式线程库。--enable-pthread配置它将会创建pthreads. 我刚刚在我的 Mac 上构建并测试了它,对于简单的 pthreads 程序来说它工作得很好。
来自自述文件:
Pth 是一个非常可移植的基于 POSIX/ANSI-C 的 Unix 平台库,它为事件驱动应用程序内的多个执行线程(也称为“多线程”)提供非抢占式基于优先级的调度。所有线程都在服务器应用程序的同一地址空间中运行,但每个线程都有自己单独的程序计数器、运行时堆栈、信号掩码和 errno 变量。
线程调度本身以协作方式完成,即线程由基于优先级和基于事件的非抢占式调度程序管理。目的是,与抢占式调度相比,这种方式可以实现更好的可移植性和运行时性能。事件工具允许线程等待,直到各种类型的事件发生,包括文件描述符上的待处理 I/O、异步信号、已用计时器、消息端口上的待处理 I/O、线程和进程终止,甚至自定义回调函数。
此外,Pth 还为 POSIX.1c 线程(“Pthreads”)提供了一个可选的模拟 API,可用于向后兼容现有的多线程应用程序。