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

问题描述 投票:0回答:1

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

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

multithreading pthreads cpu-cores
1个回答
2
投票

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

对于第一个近似值,是的,您必须计算初始线程。但请仔细阅读以上内容。相关指标不是在任何给定时间“存在”多少线程,而是有多少线程正在争夺执行资源。当前被阻塞的线程(在 I/O 上、在获取互斥体上、在 pthread_join()

上)不会争用执行资源。 更准确地说,这取决于线程的行为。例如,如果初始线程遵循启动一堆其他线程,然后将它们全部连接起来而不执行任何其他工作的模式,那么不,您不会计算该线程,因为它不会在任何程度上争用 CPU而其他线程正在这样做。

© www.soinside.com 2019 - 2024. All rights reserved.