为什么bash比C快?

 _珊渣渣 发布于 2022-12-04 03:22

出于好奇,我在Bash和C之间做了一个特别的基准:

#!/bin/sh

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

在我的机器上,这运行0.02秒.非常快.我的理解是Bash解析命令并运行fork/exec.因此,我期望C中的以下版本更快,因为它不需要进行任何解析:

#include 

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可能正在做一些聪明的优化,如果它有洞察力,那真的只是一个无操作而且根本不值得打电话.所以我尝试使用echo -n和sleep 0.0001进行相同的实验,得到了类似的结果.这些命令肯定会被调用,但Bash没有C语言的fork/exec开销.为什么Bash在这种情况下要快得多?

1 个回答
  • true并且echo都是Bash内置命令,因此它不需要生成外部进程来运行它们,使其更快.

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

    2022-12-11 03:12 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有