只需测试一个非常简单的命令:
while true; do bash -c "echo hello"; done
Run Code Online (Sandbox Code Playgroud)
你会发现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
Run Code Online (Sandbox Code Playgroud)
以下是我遇到的3个可能原因.当然,未提及的其他问题也可能导致Cygwin中的shell命令缓慢.
如果在"LAN设置"中有"自动检测设置"选项,Windows将使用WPAD协议来发现本地HTTP代理.首先,它将使用选项252发送DHCP"通知"请求,然后它将尝试在"wpad"上进行DNS查找.这两个操作可能需要几秒钟才能超时.
如果shell访问某些路径/cygdrive/...,则会执行NetBIOS名称查询,这也可能需要一些时间.
如果shell访问某些路径//mypath/...,则会执行NetBIOS名称查询,这也可能需要一些时间.
方案:
禁用Windows"Internet选项"控制面板中"LAN设置"中的"自动检测设置".
添加以下条目%SystemRoot%\system32\drivers\etc\hosts:
127.0.0.1 localhost cygdrive wpad
最后,我找到了源 - 我办公室电脑上运行的一个名为"QQPCMgr RTP Service"的服务,它是"QQ PC Manager"的实时保护服务.
通过禁用它,问题中脚本的时间可以追溯到:
real 0m0.943s
user 0m0.105s
sys 0m0.231s
Run Code Online (Sandbox Code Playgroud)
我已经告诉QQPCMgr的开发者这个,希望他们能找到原因.
这仍然比Linux慢得多,但获得与其他cygwin计算机相同的"实时".
谢谢你们!
| 归档时间: |
|
| 查看次数: |
30574 次 |
| 最近记录: |