【问题标题】:Do process and threads in the programming libraries or modules mean processes, kernel-level threads, or user-level threads?编程库或模块中的进程和线程是指进程、内核级线程还是用户级线程?
【发布时间】:2018-04-06 17:57:47
【问题描述】:

我开始想知道进程、内核级线程和用户级线程之间的区别。

Linux API 中的进程和线程是指进程、内核级线程还是用户级线程?

对于 Python、Java 和 C# 等编程语言中的标准模块有同样的问题吗?

谢谢。

【问题讨论】:

    标签: multithreading process operating-system


    【解决方案1】:

    Linux 进程和 linux 线程显然将是“内核级别”,因为 Linux 内核。但是,您应该知道,进程和线程之间的区别在 Linux 中不像在其他一些操作系统中那样明显。 Linux 进程和线程是由clone 系统调用(http://man7.org/linux/man-pages/man2/clone.2.html)创建的,你将克隆的结果称为“进程”还是“线程”取决于你给它的选项。

    对于语言 X 或库 Y,线程是“用户线程”(又名“绿色线程”)还是“内核线程”(又名“本机线程”)的问题取决于您使用的语言/库正在谈论,这可能取决于您正在谈论的库或语言的具体版本和具体实现。

    【讨论】:

    • 谢谢。如何判断语言库是否提供“用户线程”或“内核线程”?例如,使用 Java 或您熟悉的任何语言?
    • @Ben 语言规范通常让实现来决定实现使用哪种线程。
    【解决方案2】:

    首先让我们定义术语

    用户级线程:- 由内核之外的某个库创建和管理的线程。那就是内核不直接知道这些线程。

    内核级线程:- 由内核创建和管理。对于每个内核级线程,内核都维护一些数据结构来存储相关信息。

    虽然这些定义并不通用,但大多数文献都同意它们。(操作系统概念、现代操作系统等)

    当我们谈论由某个库创建的线程时,它们总是用户级线程。 要理解的是从用户级线程到内核级线程的映射

    它使用哪种映射取决于库(JVM、.NET)。它可以使用一对一的模型,每个用户级线程都将映射到自己的内核级线程。或者它可以使用多对一模型,其中多个用户线程映射到同一个内核线程。

    就 Linux 而言,它不区分进程和线程,但它为您提供了控制父子资源共享级别的能力。您可以通过使用克隆系统调用来做到这一点。如果您创建一个具有最大共享的子进程,那么它实际上就是一个线程。另一方面,如果您将标志传递给克隆,那么除了它的进程之外没有什么是共享的。

    总而言之,编程库中的线程始终是用户级线程。因为它们既不是由内核创建也不是(直接)管理的。

    【讨论】:

      猜你喜欢
      • 2015-04-08
      • 2012-11-01
      • 1970-01-01
      • 2022-08-15
      • 1970-01-01
      • 2014-08-18
      • 1970-01-01
      • 2017-05-04
      • 1970-01-01
      相关资源
      最近更新 更多