我有一台电脑,有一个cpu,4个核心和2个线程的核心,可以运行。因此,我有效率,最多8个运行线程。
当我用C编写程序并使用pthred_create函数创建线程时,建议创建多少线程:7个还是8个?我是否必须减除主线程,从而创建7,还是不应该计算主线程,而我可以有效地创建8?我知道理论上你可以创造更多,像成千上万,但我想要有效率的规划,符合我的电脑架构。
发布于 2021-10-10 01:42:35
哪个线程启动了,这与此没有多大关系。程序的初始线程是一个线程:当它被安排在执行单元上时,没有其他线程可以使用该执行单元。您不能拥有比执行单元更多的并发执行线程,如果在任何给定时间都有更多的线程可以运行,那么您将支付额外上下文交换机的成本,而不会从额外的并发性中获得任何抵消的收益。
对于第一个近似,那么,是的,你必须计数最初的线程。但是仔细阅读上面的内容。相关的度量不是在任何给定时间存在多少线程,而是有多少线程在争夺执行资源。当前被阻塞的线程( I/O、获取互斥对象、pthread_join()等)不要争夺执行资源。
更准确地说,这取决于线程的行为。例如,如果初始线程遵循一种模式,即启动一组其他线程,然后在不执行任何其他工作的情况下将它们全部连接起来,则不计算该线程,因为在其他线程进行此操作时,它并不会在很大程度上争夺CPU。
https://stackoverflow.com/questions/69510039
复制相似问题