这有啥意义吗,我的电脑只能并行运行 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 个线程?的主要内容,如果未能解决你的问题,请参考以下文章

多线程:线程多于内核有啥意义?

Python 多处理与多线程相结合

在 OpenMP 并行代码中,memset 并行运行有啥好处吗?

使用并行线程填充集合有啥危险吗?

从事件中返回一个值——这有啥好的做法吗?

在多核CPU下,同一进程下的多个线程可以并行运行吗