我正在为 POSIX 兼容系统和 Windows(R) 开发一个 C++ 程序,并且想知道:
- 什么是最好的操作系统可移植线程池库?还是我应该自己做?
- 汇集比物理处理器内核更多的胎面有什么意义?
我正在为 POSIX 兼容系统和 Windows(R) 开发一个 C++ 程序,并且想知道:
如果可能的话,最好的办法是使用抽象线程的库,而是专注于任务,例如 Intel TBB / Microsoft PPL。parallel_for
他们还提供了易于使用且功能强大的并行算法。它们还提供了解决许多其他不同问题的可能性,比如减少操作、递归的东西......
一般来说,这并不好,因为线程之间过多的任务切换和线程生成会降低性能。相反,应该尝试 - TBB 和 PPL 这样做 - 通过应用任务窃取模式(请参阅 TBB wiki 页面)来拆分不同线程上的工作。小额超额订阅的唯一好处是某些线程必须等待,这样会浪费 CPU 处理时间。
1)我也会选择Boost。
2)也许。如果任务中有任何锁定或 I/O 阻塞,则可能需要大量线程。如果任务受 CPU 限制,那就更难说了。如果任务不读取,尤其是写入大量数据,因此在运行时不会使那么多缓存无效,那么大量线程似乎实际上会略微提高性能 - 如果只是添加到变量中,则 200 个线程会得到完成的工作量比 8 略多。在更常见的 CPU 密集型任务使用大量内存并因此倾向于弄脏所有缓存的情况下,大量线程(例如 200)通常会导致吞吐量下降 20 -50% 因为缓存刷新。
Boost 线程是跨平台的,适用于 C++: http: //www.boost.org/doc/libs/1_49_0/doc/html/thread.html