【问题标题】: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 个执行线程)。
  • 对一个还不错的问题投了这么多票

标签: c++ multithreading


【解决方案1】:

只有 4 个 CPU 内核。任何更多的线程都不会并行运行,只会在高速之间交替运行。

【讨论】:

    【解决方案2】:

    硬件线程和软件线程是有区别的。 操作系统可以并行运行很多线程,但只执行其中的 4 个。

    这就像电话中的呼叫等待:您与人 a 通话,人 b 呼叫,您接听人 b。您只能与其中一个通话,但可以在通话之间切换而无需关闭通话。

    线程也一样:操作系统保持所有线程打开,分配资源,但通过分配小块时间来分割它们之间的 CPU 时间。

    【讨论】:

      【解决方案3】:

      我认为您应该知道并行和并发之间的区别。并行是指计算机在同一时间运行作业,并发是指计算机在一个人们感觉不到的时间段内运行作业。

      【讨论】:

        【解决方案4】:

        重点是:您的软件线程可能会花费大量时间等待。例如对于来自 IO 的传入数据;比如从磁盘读取的数据;或通过网络来。

        如果您将自己限制在 CP 支持的 少量 n 数量的“真实硬件”线程...那么您将失去很多潜在的吞吐量收益。

        换句话说:使用 高 m 数量的软件堆栈的潜在好处很大程度上取决于您的工作负载情况。

        当你的应用主要做 IO 相关的活动时,那么更多的线程意味着“等待”的时间花费更合理。

        但是,当您的应用程序主要进行 CPU 密集型计算时,大量线程并没有太多好处。

        【讨论】:

          猜你喜欢
          • 2014-09-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-12-17
          • 1970-01-01
          相关资源
          最近更新 更多