今天看这个教程,这个老师讲到多线程这一章节时说Windows和Linux相对于学术意义上的多进程来说,他们实际上是多线程单进程操作系统,init是他们的初始进程,其他的进程实际意义上是init的线程,他这么讲对不对,颠覆了我的价值观
今天看这个教程,这个老师讲到多线程这一章节时说Windows和Linux相对于学术意义上的多进程来说,他们实际上是多线程单进程操作系统,init是他们的初始进程,其他的进程实际意义上是init的线程,他这么讲对不对,颠覆了我的价值观
线程和进程最大的区别是:一个进程内的全部线程可以共享资源,进程间是隔离的。
对于Linux内核而言,它是个单体结构的内核,内核里面的内核线程共享了全部的内核空间,而内核就是一个内核进程,说内核是单进程多线程也没错。
但是用户空间的程序还是以进程的形式隔离运行的。
init是他们的初始进程,其他的进程实际意义上是init的线程
看一下Linux的启动流程就知道,内核启动的时候会由pid=0的启动进程启动pid = 1的init和pid = 2的kthreadd,这两个都是内核线程。前者会启动用户空间的进程,后者会启动其他内核线程。如果老师说的init是这个pid = 1的init,那就肯定不对。
那老师说的init是概念(or学术上)上的第一个进程呢?那也不对。老师是把进程、线程和创建关系混淆了。一个进程创建了另一个进程,不代表这个子进程就是一个线程,它们会被独立地调度,也不共享资源,子进程 != 线程。
实际上windows的进程更进程,线程更线程. Linux内核中实际上没有线程这种调度单位.嘛,不要纠结啦,就像linux也不是万物皆文件一样,理论和实际实现还是有一点区别的.
7 回答5.3k 阅读
4 回答4k 阅读
2 回答5.9k 阅读✓ 已解决
2 回答2.5k 阅读✓ 已解决
1 回答2.3k 阅读✓ 已解决
2 回答794 阅读✓ 已解决
2 回答3.2k 阅读
如果对内核是这样的,对上层应用程序不是这样的。因为内核是共享同一个地址空间的,但上层应用如果要共享内存,要有一个特别的操作的。