c - 当 posix_spawn 只是 fork + exec 的包装器时,为什么它会更快?
问题描述
这实际上是一个两部分的问题。
- 当它本身只是 + 的包装时,为什么
posix_spawn()
比手写更快?fork()
exec()
posix_spawn()
fork()
exec()
- 为什么
posix_spawn()
用POSIX_SPAWN_USEVFORK
比正常手写慢的vfork()
+exec()
?
根据Ruby posix spawning library的工作,它似乎posix_spawn()
提供了一致的吞吐量。我阅读了 glibc 的源代码,但我找不到任何明显的提供这种一致性的东西。有人可以向我解释吗?
我制作了一个小的测试源文件(对于这里来说太大,所以 GitHub),并让它运行大约 30 次 - 每次调用/bin/true
几次(1000-10000 之间的随机数) - 然后将总时间除以总迭代次数。结果如下所示。它在没有附加任何附加功能的普通 Linux Mint 桌面上运行。
我收集了认为vfork()
是架构缺陷的手册页,但对于我的用例来说,它很好。
在这里,v
前缀是 usingvfork()
和n
prefix 是 normal fork()
。
解决方案
推荐阅读
- python - 如何在 python 中解码这个二进制字符串?
- java - Netbeans 12.4 包含带有错误标记的文件
- wordpress - 在functions.php中错误WordPress测试Phpunit调用函数
- azure-active-directory - 配置前端以使用 B2C 进行身份验证(在 NuxtJS 中)
- excel - 使用maatwebsite在laravel中导入excel文件时如何设置实时进度条?
- c# - SendGrid 问题 "{"errors":[{"message":"Maximum credits exceeded","field":null,"help":null}]}"
- html - 带有中间图像缩放的推荐旋转木马
- php - 我们如何使用数组访问对象?
- text - 如果数据框中的字符串包含子字符串,则将所有内容替换为其他内容
- javascript - Angular/typescript 映射对象