【发布时间】:2017-05-01 16:09:20
【问题描述】:
尽管内核将页(和页表)标记为写入时复制以使fork 系统调用高效工作,但页表和相关结构的创建和拆除仍然是一项昂贵的任务。
因此,我想知道为什么 linux 社区从未设法将 posix_spawn 实现为一个真正的内核系统调用,它只是产生一个新进程,从而消除了事先调用 fork 的需要。
相反,posix_spawn 只是 fork 和 exec 的一个糟糕的 glibc 包装器。
对于每秒必须产生数千个新进程的工作负载而言,性能提升将非常显着。启动新进程的延迟也会得到改善。
【问题讨论】:
-
这不是一个好的 SO 问题。也许尝试一些针对 linux 开发的编程 reddits 或邮件列表?另外,作为记录,由于 Windows 上必须发生的所有事情,CreateProcess 比 Linux 上的 fork+exec 慢。 stackoverflow.com/questions/47845/…
-
我认为在内核中实现 posix_spawn 不会加快速度。这是内核需要做的大部分时间。不是系统调用开销。
-
如果您想在不分叉新进程和替换进程映像的情况下加载代码,则 dlopen 库或与位置无关的可执行文件。这很快,并且可以让您获得生成新进程的大部分功能,无需一些安全隔离,以及可能的基于 setuid 的权限提升。
-
你看过
vfork吗? -
是的,我知道 vfork,我认为解决这个性能问题是一个糟糕的解决方案。就像,嘿,让我们提供一个损坏的 fork 版本,而不是一开始就提供避免 fork 的选项
标签: linux linux-kernel posix system-calls