编程库或模块中的进程和线程是指进程,内核级线程还是用户级线程?

时间:2017-10-25 15:05:14

标签: multithreading process operating-system

我开始怀疑进程,内核级线程和用户级线程之间的区别。

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

Python,Java和C#等编程语言中的标准模块也存在同样的问题?

感谢。

2 个答案:

答案 0 :(得分:2)

Linux进程和linux线程显然将是"内核级别"因为Linux 内核。但是,您应该意识到,进程和线程之间的区别在Linux中并不像在其他一些操作系统中那样明显。 Linux进程和线程是由clone系统调用(http://man7.org/linux/man-pages/man2/clone.2.html)创建的,无论你是否调用了克隆a"进程"或者"线程"取决于你给它的选项。

对于语言X或库Y,线程是否是"用户线程" (a.k.a。,"绿色线程")或"内核线程" (又名"本地线程")将取决于您正在谈论的语言/库,它可能取决于您所讨论的库或语言的具体版本和具体实现。

答案 1 :(得分:0)

首先让我们定义术语

用户级线程: - 由内核之外的某些库创建和管理的线程。那就是内核并没有直接意识到这些线程。

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

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

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

由库(JVM,.NET)决定它使用什么样的映射。它可以使用一对一模型,其中每个用户级线程将映射到其自己的内核级线程。或者它可以使用多对一模型,其中多个用户线程映射到相同的内核线程。

就Linux而言,它不区分进程和线程,但它使您能够控制父级和子级之间的资源共享级别。您可以使用克隆系统调用来完成此操作。如果您创建一个具有最大共享的子进程而不是它实际上是一个线程。另一方面,如果您将标志传递给克隆,那么除了它的进程之外没有任何共享。

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