【问题标题】:Does the thread supported by the kernel run in the kernel state?内核支持的线程是否运行在内核态?
【发布时间】:2020-02-10 10:32:53
【问题描述】:

我对内核空间、用户空间、内核线程、用户线程有点困惑。是否可以认为内核支持的内核线程是在内核空间运行的?

Java,

`Thread t = new Thread(new Runnable...)`,

这个名为 't' 的线程在 Linux 中被称为轻量级进程(内核线程)。是否运行在内核态?

【问题讨论】:

  • 没有。它是运行 JVM 的用户进程的一部分。名为t 的线程是一个Java 对象,它与内核创建的用户空间线程关联t本身在Linux中不是轻量级进程,轻量级进程也不是内核线程。
  • 谢谢,我能不能这么认为:轻量级进程是运行在用户空间的内核级线程。而且我看到Linux文档说Linux使用轻量级进程来实现posix标准线程。所以我说t是Linux中的轻量级进程。我的意思是“轻量级进程(内核线程)”是指轻量级进程是由内核调度的,所以它是内核级线程。

标签: java linux operating-system pthreads


【解决方案1】:

需要澄清一些基本的操作系统概念:

  • 内核线程是由操作系统内核直接管理和调度的线程实体。用户级程序可以通过系统调用(例如通过 pthread API)访问内核线程。如果用户程序将其代码执行与内核线程绑定,则它是映射到内核线程的用户线程。
  • 轻量级进程不是一个定义明确的术语,但它通常指的是暴露给用户空间的内核线程,与比线程重的普通进程相反。从这个意义上说,您可以认为内核线程与轻量级进程相同。
  • Java 线程是通常由内核线程支持的用户线程实体(或者您可以将其称为轻量级进程)。这意味着,Java 线程的执行可以直接由操作系统内核调度。

因此,Java 线程映射到内核线程是正确的,但 Java 线程不在内核空间中运行。它是由OS内核直接调度的,在内核空间肯定有内核线程数据。有时用户线程可能会在内核空间中运行,当它调用系统调用时......

【讨论】:

  • 谢谢你很直白的解释,让我理清了很多概念。我觉得我需要加强我对用户线程映射内核线程的了解。
猜你喜欢
  • 2017-08-22
  • 2021-07-14
  • 1970-01-01
  • 2012-01-09
  • 1970-01-01
  • 2020-10-14
  • 2020-08-05
  • 2019-12-08
  • 1970-01-01
相关资源
最近更新 更多