我听说在 Windows 机器上创建新进程比在 Linux 上更昂贵。这是真的?有人可以解释为什么它更昂贵的技术原因,并提供这些原因背后的设计决策的任何历史原因吗?
mweerden:NT 从第一天起就是为多用户设计的,所以这并不是一个真正的原因。然而,您说得对,进程创建在 NT 上的作用没有在 Unix 上那么重要,因为与 Unix 相比,NT 更喜欢多线程而不是多处理。
Rob,确实在使用COW时fork相对便宜,但事实上fork后面大多是exec。执行人员还必须加载所有图像。因此,讨论分叉的性能只是事实的一部分。
当讨论进程创建的速度时,区分 NT 和 Windows/Win32 可能是个好主意。就 NT(即内核本身)而言,我不认为进程创建 (NtCreateProcess) 和线程创建 (NtCreateThread) 比普通 Unix 慢得多。可能还有更多的事情发生,但我没有看到这里性能差异的主要原因。
但是,如果您查看 Win32,您会发现它为进程创建增加了相当多的开销。其一,它需要通知 CSRSS 有关进程创建的信息,这涉及到 LPC。它至少需要另外加载 kernel32,并且在该进程被视为成熟的 Win32 进程之前,它必须执行许多额外的簿记工作项。我们不要忘记解析清单、检查图像是否需要兼容性填充程序、检查软件限制策略是否适用等所带来的所有额外开销,yada yada。
也就是说,除了进程、VA 空间和初始线程的原始创建之外,我发现所有必须完成的小事情的总和总体放缓。但正如一开始所说的——由于多线程比多任务更受青睐,唯一受到这种额外费用严重影响的软件是移植不佳的 Unix 软件。尽管当Chrome和IE8等软件突然重新发现多处理的好处并开始频繁启动和关闭进程时,这种情况发生了变化......
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)