这有啥意义吗,我的电脑只能并行运行 4 个线程?
Posted
技术标签:
【中文标题】这有啥意义吗,我的电脑只能并行运行 4 个线程?【英文标题】:Does it makes any sense, my computer can run only 4 thread in parallel?这有什么意义吗,我的电脑只能并行运行 4 个线程? 【发布时间】:2017-02-24 12:57:11 【问题描述】:我确实尝试在 cpp 中执行 hardware_concourrency
,结果是 4
,但这对我来说没有任何意义。我尝试操作 250 个并行运行的线程,每个线程都连接到 LAN 上的另一个套接字,并且运行良好。
所以,我不明白,如果系统对我说我只能并行运行4个线程,我怎么能运行250个线程?
【问题讨论】:
我确实尝试在 cpp 中做 hardware_concourrency,结果是 4,但对我来说没有任何意义。 多少个内核(如果你有超线程,还有线程)你的处理器有吗? *我怎样才能操作 250 个线程? 每个线程都有一个时间片。调度程序将交替在您的处理器内核/线程上执行哪些线程(SMT 每个内核将有超过 1 个执行线程)。 对一个还不错的问题投了这么多票 【参考方案1】:只有 4 个 CPU 内核。任何更多的线程都不会并行运行,只会在高速之间交替运行。
【讨论】:
【参考方案2】:硬件线程和软件线程是有区别的。 操作系统可以并行运行很多线程,但只执行其中的 4 个。
这就像电话中的呼叫等待:您与人 a 通话,人 b 呼叫,您接听人 b。您只能与其中一个通话,但可以在通话之间切换而无需关闭通话。
线程也一样:操作系统保持所有线程打开,分配资源,但通过分配小块时间来分割它们之间的 CPU 时间。
【讨论】:
【参考方案3】:我认为您应该知道并行和并发之间的区别。并行是指计算机在同一时间运行作业,并发是指计算机在一个人们感觉不到的时间段内运行作业。
【讨论】:
【参考方案4】:重点是:您的软件线程可能会花费大量时间等待。例如对于来自 IO 的传入数据;比如从磁盘读取的数据;或通过网络来。
如果您将自己限制在 CP 支持的 少量 n 数量的“真实硬件”线程...那么您将失去很多潜在的吞吐量收益。
换句话说:使用 高 m 数量的软件堆栈的潜在好处很大程度上取决于您的工作负载情况。
当你的应用主要做 IO 相关的活动时,那么更多的线程意味着“等待”的时间花费更合理。
但是,当您的应用程序主要进行 CPU 密集型计算时,大量线程并没有太多好处。
【讨论】:
以上是关于这有啥意义吗,我的电脑只能并行运行 4 个线程?的主要内容,如果未能解决你的问题,请参考以下文章