【发布时间】:2012-12-23 03:53:42
【问题描述】:
我有 180 个 SVM 模型要同时运行。 目前我在开始时将模型加载到数组中。 然后当我需要运行模型时,我使用 pthread 创建 180 个线程, 然后每个线程获取指向每个模型的指针,并进行一些计算。
我担心的是,每次我想做一些计算时创建 180 个线程可能会产生严重的开销(并且有很多计算要做)。 所以我想的是,一开始就将 SVM 模型加载到 180 个线程中,并在每次我想做一些计算时重用它们。
我的想法是否可行?将不同的模型加载到每个线程中并同时使用所有线程? 我考虑过线程池,但我认为这不是典型的线程池用例。 我将不胜感激任何建议。谢谢。
【问题讨论】:
-
当然可行——为什么不呢?用一些合适的信号在顶部循环你的计算应该没问题。如果您可以避免不断创建/终止/销毁 180 个线程,那就太好了!不确定线程池问题 - 如果其中任何一个线程进行阻塞调用,180 个线程就可以了,但如果它们是 CPU 密集型的,您可能需要尝试任务/池解决方案。
-
感谢您的回复!!我的任务实际上是 CPU 密集型的,所以我用“threadpool.sourceforge.net”做了一些测试。但是性能并不比使用 pthread 好。我猜由于 boost::thread 是 pthread 的包装器,因此在性能方面不可能有任何“大”的改进。我现在计划测试 OpenMP。如果这不起作用,我还不如坚持使用 pthread。
标签: multithreading pthreads threadpool