【问题标题】:User level thread programming - multiple kernel threads?用户级线程编程 - 多个内核线程?
【发布时间】:2011-08-19 17:24:03
【问题描述】:

C++(posix 库)和 Java 等许多编程语言都提供了使用用户级线程的能力。但是,如果所有这些用户级线程都在单个内核线程中运行 - 您只会得到多道程序或多处理(如果有多个处理器可用)的错觉,对吗?我的意思是——所有这些线程仍然在同一个内核线程中运行。我这样说对吗?如果是,那么我们究竟打算如何使用用户级线程来提高性能?

编辑:我想在多对一模型(用户级线程到内核线程映射)上性能实际上是不可能的。因此,在多对多模型中,只有在内核级线程分叉的情况下,才有可能提高性能。所以我的问题是,即使用户级线程的开销很低,我也无法真正想象出与调度内核级线程一样大的性能提升。

EDIT2:基本上这就是我想要验证的内容 - “假设一台计算机有 4 个处理器。现在,假设我的程序是唯一运行的东西 - 并且分叉了 4 个线程,每个线程都做完全独立的事情。现在,如果映射是一对一的(用户到内核映射),我实际上可以获得完美的 4 倍加速。但是,如果说(出于某种原因)所有 4 个用户线程都映射到同一个内核线程空间 - 那么就没有加速因为多处理。这是因为,即使我有 4 个用户级线程 - 它们在同一个内核空间中运行并且不能跨 4 个内核拆分。

【问题讨论】:

  • 在单个内核线程中运行的用户级线程?据我所知,没有一种操作系统可以以这种方式工作。我也想不出一个。更好地记录您的问题。
  • 看en.wikipedia.org/wiki/GNU_Portable_Threads。有一种称为多对一的模型,它将多个用户级线程映射到单个内核线程。
  • 嗯,俗称“纤程”或“协程”。没有人再使用它们,因为它们吸收了现代 cpu 内核。 cpu 缓存局部性非常差。
  • 我的评论是:它们并没有因为 cpu 缓存局部性差而变得更糟。相反,它们不适用于多核处理 - 因为它们的映射模型(一对多)。
  • 事实上,这正是多对一模型的缺点——一个用户级线程阻塞,然后是整个内核线程阻塞。

标签: multithreading operating-system


【解决方案1】:

不,你根本不对。

在大多数情况下,使用 C/C++ 的 posix 或 Java 的 Thread 实现来创建和运行线程,意味着底层用户空间实现在一个进程的内存空间内运行真正的线程。这意味着,在 4 个 CPU 的机器上运行 4 个线程可以为您提供真正的 4 倍加速 - 当然,如果一切都正确编写,并且操作系统本身没有以某种方式阻止(阻止)平衡 CPU-2 线程的使用。

我说的是“大多数情况”,因为总有 POSIX lib 的实现(例如一些调试或不完整的实现)或 Java 线程(例如一些不完整的 VM 或外来设置),它们不会运行真正的线程 - 只是模拟这...但是在标准 PC 环境下,您可以确定“不,您根本不对”:)

【讨论】:

  • 在“线程共享一个进程部分的内存空间”之前,我完全同意你的看法。我的疑问是-“使用pthreads api创建的4个线程-创建4个用户级线程。现在我迷路的地方是-这4个用户级线程如何映射到内核线程?例如,说所有4个用户级线程线程在单个内核线程中运行-那么我真的看不到任何潜在的性能改进。因为无论如何内核只运行一个线程对吗?
  • 其实在给它一些,我想我明白了。所以本质上你是说即使内核只运行一个线程 - 内核线程正在做更多的工作(因为它运行多个用户级线程)。明白了!!!
  • 我不知道具体在哪里 - 但你不知何故错过了重点。可能是因为您已经阅读过“GNU Portable Threads”。忘了它!这只是“POSIX 线程”的实现之一——它允许您在不容易启用 POSIX 的系统上模拟多线程。
  • 您的问题:“这 4 个用户级线程如何映射到内核线程?”我的回答:“实现方式允许它 - 在大多数情况下(在 Windows、Linux 等上)1 个线程与内核一样是 1 个单独的线程。内核做了所有允许分配每个线程以在处理内核之间平衡它们的事情” .
  • 完全正确!!所以你确实同意我的观点——“它最终取决于内核调度程序”。因此,由于某种原因,如果内核无法跨 4 个内核进行调度,那么您的 4 个用户级线程并不会真正导致 4 倍的加速。
猜你喜欢
  • 2022-08-15
  • 2012-11-01
  • 1970-01-01
  • 2017-05-04
  • 1970-01-01
  • 2022-10-07
  • 1970-01-01
  • 2013-07-15
  • 1970-01-01
相关资源
最近更新 更多