在C+中处理线程的创建/重用+; 我正在做一个C++爱好项目,需要一秒钟处理好几次。将我的工作分成多个线程可以提高完成速度。当线程完成时,我应该保留线程直到我有更多的工作要做,还是应该扔掉线程,在我再次需要它们时只制作新的线程?

在C+中处理线程的创建/重用+; 我正在做一个C++爱好项目,需要一秒钟处理好几次。将我的工作分成多个线程可以提高完成速度。当线程完成时,我应该保留线程直到我有更多的工作要做,还是应该扔掉线程,在我再次需要它们时只制作新的线程?,c++,multithreading,C++,Multithreading,如果只是每秒几次(例如每秒10次),那么保持简单,完成后扔掉线程 当你有成百上千的线程时,你应该开始考虑一个线程池 所有这些都是假设你在一台典型的机器上工作,而不是像微控制器那样的一个弱CPU 当线程完成后,我应该保留线程,直到我有更多的工作为他们,还是我应该扔掉线程,只是在我再次需要它们时制作新的线程 如果你只需支付一次,那么多次支付线程创建费用是没有意义的(Greta会告诉你“你怎么敢?!”)。(阻塞)线程池中的空闲线程不会占用任何CPU时间,并且可以以尽可能短的延迟和开销执行任务,因为线程

如果只是每秒几次(例如每秒10次),那么保持简单,完成后扔掉线程

当你有成百上千的线程时,你应该开始考虑一个线程池

所有这些都是假设你在一台典型的机器上工作,而不是像微控制器那样的一个弱CPU

当线程完成后,我应该保留线程,直到我有更多的工作为他们,还是我应该扔掉线程,只是在我再次需要它们时制作新的线程

如果你只需支付一次,那么多次支付线程创建费用是没有意义的(Greta会告诉你“你怎么敢?!”)。(阻塞)线程池中的空闲线程不会占用任何CPU时间,并且可以以尽可能短的延迟和开销执行任务,因为线程的所有必要资源都是在生成线程时分配的


我建议使用“英特尔TBB任务调度器”,请参阅。它提供了一种高效的现代编程范例,您可以将问题划分为多个阶段/任务,其中一些阶段/任务可以并行执行。我无法推荐足够多的观看。

也许你只是想:真的,这是你必须考虑的设计因素。如果你对创建/处理线程感到满意,你可以用任何一种方法来实现它。这完全取决于你希望线程完成的工作类型。就目前而言,这个问题过于宽泛,因为它并没有包含足够的细节来给出一个有意义的答案,而只是“试一试”(例如IO绑定的任务线程应该更快;内存/CPU绑定的线程甚至可能比单个线程慢)。背景阅读“线程池”。如果你需要经常使用它们,就把它们放在身边。“一秒钟几次”听起来是这样的。标杆管理有助于知道你是否需要建立一种方法来保持它们的周围,或者在需要的时候创建新的。在C++中创建线程池是主题。