在现代 Linux 上达到与 Linux 相同效果的最快、最好的方法是什么?fork
-execve
combo 从一个大的过程 ?
我的问题是进程分叉大约 500MByte 大,并且一个简单的基准测试只能从进程中实现约 50 个分叉/秒(比较最小大小的进程的约 1600 个分叉/秒),这对于预期的应用程序来说太慢了。
一些谷歌搜索出现vfork http://www.kernel.org/doc/man-pages/online/pages/man2/vfork.2.html作为这个问题的解决方案而被发明......但也有关于不使用它 http://www.linux.org/docs/ldp/howto/Secure-Programs-HOWTO/avoid-vfork.html。现代Linux似乎已经获得了相关的clone
and posix_spawn
来电;这些可能有帮助吗?现代的替代品是什么vfork
?
我在 i7 上使用 64 位 Debian Lenny(该项目可以转移到 Squeeze,如果posix_spawn
有助于)。
在 Linux 上,您可以使用posix_spawn(2)
与POSIX_SPAWN_USEVFORK
标志以避免从大进程分叉时复制页表的开销。
See 最小化创建应用程序子进程的内存使用量 https://web.archive.org/web/20190922113430/https://www.oracle.com/technetwork/server-storage/solaris10/subprocess-136439.html的一个很好的总结posix_spawn(2)
、它的优点和一些例子。
从中获利vfork(2)
, 确保你#define _GNU_SOURCE
before #include <spawn.h>
然后简单地posix_spawnattr_setflags(&attr, POSIX_SPAWN_USEVFORK)
我可以确认这在 Debian Lenny 上有效,并且在从大型进程分叉时提供了巨大的加速。
benchmarking the various spawns over 1000 runs at 100M RSS
user system total real
fspawn (fork/exec): 0.100000 15.460000 40.570000 ( 41.366389)
pspawn (posix_spawn): 0.010000 0.010000 0.540000 ( 0.970577)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)