【发布时间】:2017-10-14 18:28:25
【问题描述】:
使用线程可以显着提高性能,因为有更多的“工人”来执行工作。但是,我进行了测试并注意到它是前几个线程对性能的影响最大。
为什么大量线程的时间几乎是恒定的,比如 1000 和 2000 个线程?
是不是因为没有足够的工作要做,所以大多数人都在睡觉等待工作弹出?
编辑: 我在 C 中创建了一个多线程查找器,它仅用作 bash 中的 find 命令。我花了一些时间处理不同数量的线程(phread_create),并注意到我只通过创建几个线程就可以获得最大的性能影响。但是,40 线程和 600 线程的时间几乎相同。为什么会这样?
谢谢
【问题讨论】:
-
不,这是因为没有足够的工人。你的cpu有2000个核心吗?这就是为什么。
-
除非您有数百个 CPU 内核创建超过一千个线程,否则只会浪费系统资源。操作系统将在您的线程之间进行更多的切换,而不是线程本身有时间运行。您创建的线程越多,线程运行的时间就越少。
-
如果没有更多上下文和细节,这并不是一个真正有意义的问题,尤其是考虑到“线程”的不同可能含义。
-
抱歉不清楚,我已经编辑并添加了更多文本来解释我想问的内容。 @GSerg
-
我希望评论/回答此类问题的 SO 用户在声明线程 CPU 开销时指定“就绪/运行”线程。
标签: c multithreading