【问题标题】:POSIX threads vs parallelismPOSIX 线程与并行性
【发布时间】:2019-06-14 09:04:00
【问题描述】:

POSIX 线程(由 pthread 库管理)是否并行工作?我的讲师告诉我们,这个库只创建不受 Linux 内核管理的用户线程。我写了一些填充大矩阵的代码,并比较了线程和整个程序的执行时间,它似乎可以并行工作。我可以使用这个库来创建带有内核识别线程的并行程序吗?

【问题讨论】:

  • 也许您的讲师正在考虑 Windows?来自man 7 pthreads:线程不共享进程 ID。 (实际上,LinuxThreads 线程被实现为共享更多信息的进程,但它们不共享公共进程 ID。)Linux-Threads 线程(包括管理器线程)使用 ps(1) 作为单独的进程可见。
  • @cdarke 即使这样线程也由内核管理并并行执行。讲师可能的意思是 POSIX 没有规定这种线程实现。理论上,符合 POSIX 的实现可以创建并发执行但不并行执行的用户线程。
  • @cdarke:LinuxThreads 早就被 NPTL 取代了。
  • @Obake:也许您的讲师将 pthreads 与 GNU pth 混淆了。

标签: c linux pthreads posix


【解决方案1】:

Posix 线程是 Linux 上带有 glibc/musl(+可能是其他 pthread 实现)的内核线程。

【讨论】:

【解决方案2】:

你需要区分规范和实现。

POSIX 是一个 规范 并且(我认为)您的讲师是正确的,即 POSIX 并未规定线程需要由内核管理并并行执行(至少我找不到任何相关的措辞in the official specification)。

在实践中,大多数主要实现——包括(如另一个答案中提到的)在 Linux 上通过 glibc 和在 Windows 上通过 MinGW——通过内核系统调用实现 pthread 并并行执行它们。因此,如果您的讲师实际上说 pthread 在具体使用中不是内核线程,那么这至少是一种误导,并且可以说是错误的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-19
    • 2011-06-08
    • 1970-01-01
    • 1970-01-01
    • 2014-04-30
    • 2011-09-16
    相关资源
    最近更新 更多