我一直在运行 drush 脚本(用于 Drupal) 和 cygwin 在我相对快速的Windows机器上,但我仍然必须等待 大约一分钟 对于任何drush命令(特别是 清晰的drush缓存 执行)。

我很确定这与Cygwin的速度有关,因为我的开发人员(正在运行Linux)可以在大约5秒钟内运行这些脚本。

有没有办法使Cygwin每个终端使用更多内存和/或CPU?

有帮助吗?

解决方案

您遇到的问题不是Cygwin中的任意限制,您可以使设置更改。这是Cygwin必须努力制定POSIX语义程序的固有方面。

POSIX fork() 系统呼叫在窗户上没有本机等效,因此Cygwin被迫模仿它 一种非常低效的方式. 。外壳脚本导致通话 fork() 每次执行外部过程时,都会发生很多事情,因为相对于我们通常称为编程语言的shell脚本语言是如此贫穷。外部程序是Shell脚本完成任何后果的方式。

Cygwin中还有其他效率低下,尽管如果您对其进行了介绍,那么您可能会发现这是第一速受到打击。在大多数地方,使用它构建的程序和基础操作系统之间的cygwin层非常薄。 Cygwin的开发人员需要大量痛苦来使层保持尽可能薄,同时仍提供正确的POSIX语义。当前不常见的厚度 fork() Call Motulation不可避免地添加了Microsoft fork() 将设施键入其操作系统。他们这样做的激励措施不是很好。

上面发布的解决方案为评论还不错。

另一种可能性是通过 drush 脚本,看看是否有针对外部程序的调用,您可以用Shell Interinsics或更有效的构造替换。我不会期望通过这样做会提高速度,但是它具有不错的属性,您也可以在Linux方面加快速度。 ((fork() 在Linux上是有效的,但是启动外部程序仍然是您可能不必像目前那样经常付款的速度。)例如:

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

会更快地运行:

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

第一个版本可以说是更清晰的,但是它需要至少三个外部程序调用,并且具有原始外壳, 四个. 。 (您看到所有这些吗?)替换只需要一个外部程序调用。

其他提示

还要查看速度降低Cygwin创业公司的事情:

  • 修剪您的Windows路径(到裸露的骨头,例如%SystemRoot% System32;%SystemRoot%)
  • 从BashRC和BASH_PROFILE中删除您不需要的东西
  • 将仅在终端窗口中需要的东西从bashrc移动到bash_profile
  • 狂欢完成的一场令人惊讶的时间是塞格温(Cygwin)。如果您正在使用它(并且应该因为它很棒),则仅对所需的命令完成源完成(而不是所有这些命令的命令)。而且,如上所述,他们从 bash_profile, , 不是 bashrc.

您可以将Cygwin提高优先级。

写一个新的批处理文件,例如,“ cygstart.bat”,其中包含以下内容:

start "Cygwin" /high C:\cygwin\Cygwin.bat

/high 开关为外壳提供了更高的过程优先级。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top