我开始怀疑进程,内核级线程和用户级线程之间的区别。
Linux API中的进程和线程是指进程,内核级线程还是用户级线程?
Python,Java和C#等编程语言中的标准模块也存在同样的问题?
感谢。
答案 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而言,它不区分进程和线程,但它使您能够控制父级和子级之间的资源共享级别。您可以使用克隆系统调用来完成此操作。如果您创建一个具有最大共享的子进程而不是它实际上是一个线程。另一方面,如果您将标志传递给克隆,那么除了它的进程之外没有任何共享。
总之,编程库中的线程始终是用户级线程。因为它们既不是由内核创建也不是由内核管理。