当我们计算我们可以使用 Pthreads 在 C 中创建的建议线程数时,我们是否计算主线程?

Do we count the main thread when we compute the recommended number of threads that we can create in C using Pthreads?

我有一台计算机,有 1 个 cpu、4 个内核和每个内核 2 个线程,可以 运行。所以我有最多 8 个 运行ning 线程的效率。

当我用C 编写程序并使用pthred_create 函数创建线程时,建议创建多少个线程:7 或8?我是否必须减去主线程,从而创建 7,或者不应该计算主线程,我可以有效地创建 8?我知道理论上你可以创建更多,比如数千个,但我希望根据我的计算机架构进行有效计划。

哪个线程启动哪个关系不大。一个程序的初始线程是一个线程:当它被调度在一个执行单元上时,没有其他线程可以使用该执行单元。并发执行的线程不能多于执行单元,如果在任何给定时间有超过 运行 资格的线程,那么您将支付额外上下文切换的成本,而不会从额外的并发中获得任何抵消收益。

要初步估计的话,是的,你必须算初始线程。但请仔细阅读以上内容。相关指标不是在任何给定时间有多少线程 存在 ,而是有多少正在争夺执行资源。当前被阻塞的线程(在 I/O、获取互斥量、pthread_join()。)不争用执行资源。

更准确地说,这取决于线程的行为。例如,如果初始线程遵循启动一堆其他线程的模式,然后加入它们而不自己执行任何其他工作,那么不,你不算那个线程,因为它不争用 CPU在其他线程这样做的任何重要程度上。