【发布时间】:2010-11-29 00:16:38
【问题描述】:
我必须使用 boost::thread 用 C++ 编写一个不太大的程序。
目前的问题是处理大量(可能是数千或数万个。也可能是成百上千)数量的(可能)大文件。每个文件都相互独立,并且它们都驻留在同一个目录中。我正在考虑使用多线程方法,但问题是,我应该使用多少线程?我的意思是,什么数量级? 10、500、12400?
有一些同步问题,每个线程应该返回一个值结构(为每个文件累积),然后将这些值添加到“全局”结构中以获取整体数据。我意识到有些线程可能会因为同步而“饿死”,但如果它只是一个添加操作,这有关系吗?
我在想
for(each file f in directory){
if (N < max_threads)//N is a static variable controlling amount of threads
thread_process(f)
else
sleep()
}
这是在 HP - UX 中,但我无法经常测试它,因为它是一个远程且完全无法访问的服务器。
【问题讨论】:
-
3. 1 做某事加上 1 以非原子方式添加到另一个。
-
这完全取决于您的硬件以及您正在执行的处理类型。它是受 CPU 限制还是受 IO 限制?如果 CPU 受限,您有多少个 CPU 内核?如果 IO 受限,您在什么时候超过了设备的吞吐量限制?
标签: c++ boost multithreading performance