【问题标题】:Using multi core support in C / C++在 C/C++ 中使用多核支持
【发布时间】:2014-03-03 03:59:38
【问题描述】:

我在some posts 中看到有人说要使用处理器的多核使用Boost thread(使用多线程)库。通常线程对操作系统是不可见的。那么我们如何确定多线程将支持多核的使用。 Java线程和Boost线程有区别吗?

【问题讨论】:

  • 操作系统是抢占线程的唯一提供者。 Boost 只是包装了 POSIX。 Java 和 Boost 的区别在于语言;他们应该实现相同的目标。
  • Usually threads are not visible to operating system 不知道你是从哪里想到这个主意的......
  • “通常线程对操作系统不可见” --- 不是真的。查找“绿色线程”与“本机线程”。并非所有线程都是绿色的。
  • 线程是在进程中运行的部分。操作系统只能看到进程。过程中没有细节。那么操作系统如何才能支持多线程呢?在java中,我尝试过多线程程序,一次只运行一个线程。
  • 请避免将其他单词放在反引号之间。

标签: c++ multithreading boost parallel-processing


【解决方案1】:

操作系统也被称为“主管”,因为它可以访问所有内容。由于它负责管理抢占式线程,它确切地知道一个进程有多少,并且可以随时检查它们在做什么。

Java 可能会添加一个间接层 (green threads) 以使许多线程看起来像一个,这取决于 JVM 和配置。 Boost 不这样做,而只是封装了通常直接与 OS 内核通信的 POSIX 接口。

大规模多线程应用程序可能会从合并线程中受益,因此准备运行的线程数与逻辑 CPU 内核数相匹配。但是,将所有内容减少到一个线程可能太过分了:v)并且@Voo 说绿色线程只是一种遗留技术。一个好的JVM应该支持真正的多线程;检查您的配置选项。在 C++ 方面,有 Intel TBB 和 Apple GCD 等库来帮助管理并行性。

【讨论】:

  • 感谢您的回答。英特尔 TBB 和 Apple GCD 硬件是否依赖?如果是这样,我是否必须根据硬件平台进行编码?有没有办法独立使用并行处理硬件(C/C++的任何内置库)?
  • @Lahiru Intel TBB 是合理的跨平台;我没用过,但它至少应该支持 Windows、Mac 和主流 Linux。我不认为他们针对 AMD 芯片进行了优化,但应该没问题。 Apple GCD 仅适用于 Mac(好吧,仅适用于 Darwin,但非 Mac Darwin 已死 AFAIK),并且要求您使用 Objective C 进行编译。
  • Lahiru 添加到@Potatoswatter 的出色答案值得指出的是,现代多核 CPU 的架构深受支持多线程进程的需求的影响。我们所知道的线程需要 SMP 硬件架构,这导致了复杂的事情,例如 QPI 和 Hypertransport。在不需要支持 SMP 的情况下,现代 CPU 在架构上更接近于 Transputers。因为它们是“假的”SMP,因为它们现在真的是 NUMA。 QPI 和 HyperTransport 非常聪明!
  • 绿色线程的原因几乎只是简单和避免依赖于平台的行为。十多年来,没有生产 JVM 使用过绿色线程——在性能方面,它从来都不是赢家。如今,您必须竭尽全力才能找到甚至支持它们的 JVM。
  • @Voo 那么听起来,如果 JVM 自己进行线程池以支持大规模多线程,即 TBB,那将不会被称为“绿色线程”。这更有可能是 OP 遇到的,还是只是一个谜?
猜你喜欢
  • 1970-01-01
  • 2011-02-25
  • 2011-07-10
  • 1970-01-01
  • 1970-01-01
  • 2018-02-11
  • 2015-02-21
  • 1970-01-01
相关资源
最近更新 更多