微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

bash – 如何加快Cygwin?

在我相对较快的Windows机器上,我已经运行了 drush个0700的脚本( drupal),但是我仍然需要等待大约一分钟才能使用任何drush命令(特别是清除缓存才能执行)。

我确信它与cygwin的速度有关,因为我的同行开发者(正在运行linux)可以在大约5秒内运行这些脚本。

有没有办法使cygwin每个终端使用更多的内存和/或cpu

你所遇到的问题不是Cygwin的任意限制,你可以随着设置更改而消失。这是Cygwin必须努力获得根据其期望构建的POSIX语义程序的固有方面。

POSIX fork()系统调用在Windows上没有本机的同义词,所以Cygwin被迫在a very inefficient way中进行仿真。Shell脚本每次执行一个外部进程时都会调用fork(),这从shell脚本开始很多相对于我们通常所说的编程语言,语言是如此贫穷。外部程序是shell脚本如何获得任何后果。

Cygwin还有其他的低效率,尽管如果你对它进行了分析,你可能会发现这是速度最快的一个。在大多数地方,使用它和底层操作系统构建的程序之间的Cygwin层相当薄。 Cygwin的开发者需要很大的努力才能使层尽可能的薄,同时仍然提供正确的POSIX语义。在当前的fork()调用仿真中,当前不常见的厚度是不可避免的。他们的做法不是很好。

上面发布的解决方案是不错的。

一个可能性是通过drush脚本,看看是否有调用外部程序可以用shell内在函数或更有效的结构来替代。我不会期望通过这样做提高巨大的速度,但它具有不错的属性,您可以在Linux端加快速度。 (fork()在Linux上是高效的,但启动外部程序仍然是一个很大的速度,你可能不必像现在一样付费)。例如:

numlines=`grep somepattern $somefile | wc -l`
if [ $numlines -gt 0 ] ; then ...

将运行速度更快:

if grep -q somepattern $somefile ; then ...

一个版本可以说是更清楚的,但它至少需要三个外部程序调用,并且需要四个原始shell。 (你看到所有的?)替换只需要一个外部程序调用

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐