Windows操作系统的多进程

图片描述

今天看这个教程,这个老师讲到多线程这一章节时说Windows和Linux相对于学术意义上的多进程来说,他们实际上是多线程单进程操作系统,init是他们的初始进程,其他的进程实际意义上是init的线程,他这么讲对不对,颠覆了我的价值观

这是URL http://www.icourses.cn/jpk/ch...

阅读 4.9k
3 个回答

如果对内核是这样的,对上层应用程序不是这样的。因为内核是共享同一个地址空间的,但上层应用如果要共享内存,要有一个特别的操作的。

线程和进程最大的区别是:一个进程内的全部线程可以共享资源,进程间是隔离的。

对于Linux内核而言,它是个单体结构的内核,内核里面的内核线程共享了全部的内核空间,而内核就是一个内核进程,说内核是单进程多线程也没错。

但是用户空间的程序还是以进程的形式隔离运行的。

init是他们的初始进程,其他的进程实际意义上是init的线程

看一下Linux的启动流程就知道,内核启动的时候会由pid=0的启动进程启动pid = 1的init和pid = 2的kthreadd,这两个都是内核线程。前者会启动用户空间的进程,后者会启动其他内核线程。如果老师说的init是这个pid = 1的init,那就肯定不对。

那老师说的init是概念(or学术上)上的第一个进程呢?那也不对。老师是把进程、线程和创建关系混淆了。一个进程创建了另一个进程,不代表这个子进程就是一个线程,它们会被独立地调度,也不共享资源,子进程 != 线程。

实际上windows的进程更进程,线程更线程. Linux内核中实际上没有线程这种调度单位.嘛,不要纠结啦,就像linux也不是万物皆文件一样,理论和实际实现还是有一点区别的.

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题