为什么linux进程比windows更轻量级?

时间:2014-02-05 12:16:58

标签: c++ linux multithreading

我听说linux进程比windows进程“轻量级”。

Linux进程更像是Windows中的“线程”。

因此,Oracle数据库等应用程序受到Linux中的多进程和Windows中的多线程的支持。

那么,这种“轻量级”是什么意思呢?

2 个答案:

答案 0 :(得分:6)

“轻量级”意味着在Linux上创建新流程的成本低于在Windows上创建新流程的成本。费用一词基本上是指所需的时间和操作系统资源。

Linux进程通过调用fork(2)启动新进程。这会创建一个新进程,但不会复制内存,因此非常快。而是将新进程的内存标记为copy on write,以便如果新进程开始更改其地址空间,则仅复制所触摸的页面。由于这种方法的速度,应用程序可以快速生成自己的新实例来处理传入的工作。它还具有优于线程的优势,如果子进程崩溃,它将不会取消父进程。

Windows不支持fork,启动新进程的唯一方法是启动它的全新副本。这意味着即使进程即将启动自身的新实例,操作系统也必须将新进程视为完全独立的进程,并且无法使用当前正在运行的进程的页面。因此,启动新进程所需的时间比Linux要长。

答案 1 :(得分:2)

在Linux上,线程和进程都是“任务”。内核级别没有两者分离。要创建新任务,您可以进行clone系统调用,然后决定要与之共享哪些资源。当一个任务共享其父级的内存空间时,你倾向于将其称为一个线程,当它获得自己的内存空间时,你倾向于将其称为一个进程。

因此将Linux上的程序描述为多线程或多进程有点误导:在幕后它们是相同的。它们比Windows进程更轻量级吗?你必须写一个基准来找出答案。