Closed. This question is not reproducible or was caused by typos 。它目前不接受答案。












想改善这个问题吗?更新问题,使其成为 Stack Overflow 的 on-topic

6年前关闭。



Improve this question




出于好奇,我在 Bash 和 C 之间做了一个临时基准测试:
#!/bin/sh

for i in `seq 1 10000`; do
    true
done

在我的机器上,这运行时间为 0.02 秒。非常快。我的理解是 Bash 解析命令并运行 fork/exec。因此,我预计以下 C 版本会更快,因为它不需要进行任何解析:
#include <unistd.h>

int main() {
    char *const argv[] = { "/bin/true", NULL };

    for (int i = 0; i < 10000; i++) {
        pid_t pid = fork();
        if (pid == 0) // child
                execv(argv[0], argv);

        int status = 0;
        waitpid(pid, &status, 0);
    }

    return 0;
}

令我惊讶的是,这花了大约 8 秒!我认为 Bash 可能正在做一些聪明的优化,如果它有洞察力,true 只是一个空操作,根本不值得调用。所以我用 echo -n 和 sleep 0.0001 尝试了相同的实验并得到了类似的结果。命令肯定会被调用,但 Bash 没有 C 具有的 fork/exec 开销。为什么 Bash 在这种情况下要快得多?

最佳答案

trueecho 都是 Bash 内置命令,因此不需要生成外部进程来运行它们,从而使其速度更快。

$ type true
true is a shell builtin
$ type echo
echo is a shell builtin

关于c - 为什么 bash 比 C 快?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27599516/

10-16 20:41