bash - 如何加速Cygwin?

标签 bash drupal cygwin drush

我一直在跑drush脚本(用于 Drupal )与 Cygwin在我相对较快的 Windows 机器上,但我仍然需要等待 大约一分钟 才能执行任何 drush 命令(特别是 drush cache clear 才能执行)。

我很确定这与 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() 调用仿真中当前不常见的厚度是不可避免的,除非 Microsoft 在其操作系统中添加 native fork() 类型的工具。他们这样做的动机不是很好。

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

另一种可能性是检查 drush 脚本,看看是否有对外部程序的调用,您可以用 shell 内在函数或更高效的构造替换。我不希望这样做会带来巨大的速度提升,但它具有一个很好的特性,即您也可以在 Linux 端加快速度。 (fork() 在 Linux 上是高效的,但启动外部程序仍然是一个很大的速度问题,您可能不必像现在那样经常付费。)例如:

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

运行速度会更快:

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

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

关于bash - 如何加速Cygwin?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2512892/

相关文章:

bash - 使用 bash mangles 文件从 CSV 映射重命名文件

java - 如何在cygwin中快速切换JDK?

drupal - 如何仅在某些页面 View 显示上显示 block

python - 安装 pyspeckit 时 matplotlib 错误

cygwin - 无法在 Cygwin 上启动 HAProxy

bash - "Hacking"5个字符的远程shell

bash - 从文件 BASH 中对列进行排序

linux - 如果我使用位于 PATH 中的二进制文件的名称命名 bash 脚本函数,会发生什么情况?

javascript - 如何删除 Drupal 7 下拉 HTML 选择列表中的禁用选项

html - drupal 的默认主题有一些问题