在我相对较快的Windows机器上,我已经运行了
drush个0700的脚本(
drupal),但是我仍然需要等待大约一分钟才能使用任何drush命令(特别是清除缓存才能执行)。
我确信它与cygwin的速度有关,因为我的同行开发者(正在运行linux)可以在大约5秒内运行这些脚本。
有没有办法使cygwin每个终端使用更多的内存和/或cpu?
你所遇到的问题不是Cygwin的任意限制,你可以随着设置更改而消失。这是Cygwin必须努力获得根据其期望构建的POSIX语义程序的固有方面。
原文链接:https://www.f2er.com/bash/387508.htmlPOSIX 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。 (你看到所有的?)替换只需要一个外部程序调用。