【发布时间】:2011-07-25 03:04:08
【问题描述】:
只测试一个非常简单的命令,例如:
while true; do bash -c "echo hello"; done
您会发现 Cygwin 中的 bash 有多慢。有人知道为什么吗?
这是在 win7 上全新安装的 cygwin 1.7。
感谢Jared的测试思路,我把命令修改成了这个(加了bash -c):
time for i in {1..10} ; do bash -c "echo Hello" ; done
Hello
...
real 0m7.711s //it's the problem
user 0m0.091s
sys 0m0.476s
【问题讨论】:
-
问题可能只是Windows 7无法快速创建进程?
-
Windows 不能非常快地fork 进程。事实上,它根本不是
fork。 Cygwin 捏造它,但不能像真正的 *nix 那样有效地做到这一点。每个进程都是从头开始,并且必须加载和初始化 fork-and-go 系统已经加载的 cygwin DLL、libc 等。 -
但奇怪的是,在创建10个进程的命令大约7.7秒的过程中,CPU是空的,可以看到user & sys时间稍微有点。看起来 bash 正在等待什么,但它在等待什么?
-
我得到 0.970s 真实,0.090s 用户,0.307s 系统。 (我认为它可能是一个启动脚本,但
bash -c ...不会调用任何启动脚本。)strace -o bash.strace bash -c "echo hello"可能会告诉您一些有用的信息。 -
> time ls -la ~/c/cygwin64/bin给了我一个难以想象的 3 分 46.373 秒!!它总是很慢,但最近我们的 IT 部门。更改了 Windows 登录域和用户名,从那以后一切都崩溃了……