Вопрос

Я бегал вырубка Сценарии (для Drupal) с Cygwin На моей относительно быстрой машине Windows, но мне все еще нужно ждать около минуты для любой команды Drush (в частности Drush Cache Clear выполнить).

Я совершенно уверен, что это как -то связано со скоростью Cygwin, поскольку мои коллеги -разработчики (которые управляют Linux) могут запускать эти сценарии примерно за 5 секунд.

Есть ли способ заставить Cygwin использовать больше памяти и/или процессора на терминал?

Это было полезно?

Решение

Проблема, с которой вы сталкиваетесь, не является каким -то произвольным ограничением в Cygwin, который вы можете сделать, уходите с изменением настроек. Это неотъемлемый аспект того, как Cygwin должен работать, чтобы построить программы Semantics Semantics Posix.

POSIX fork() Системный вызов не имеет собственного эквивалента на окнах, поэтому Cygwin вынужден эмулировать его в очень неэффективный способ. Анкет Сценарии оболочки вызывают призыв fork() Каждый раз, когда они выполняют внешний процесс, который происходит довольно много, поскольку языки сценария оболочки настолько обнищаны по сравнению с тем, что мы обычно называем языком программирования. Внешние программы - это то, как сценарии Shell получают что -то последнее.

В Cygwin есть и другие неэффективность, хотя, если вы профилируете это, вы, вероятно, обнаружите, что это попадает на скорость номер один. В большинстве мест слой Cygwin между программой, созданной с использованием ее и базовой ОС, довольно тонкий. Разработчики Cygwin прилагают много болей, чтобы слой был как можно более тонким, при этом обеспечивая правильную семантику POSIX. Тока необычная толщина в fork() Вызов эмуляции неизбежно, если Microsoft добавила нативную fork() Тип объекта для их ОС. Их стимулы для этого не очень хороши.

Решения, размещенные выше, как комментарии не плохие.

Другая возможность - пройти через drush Скрипт и посмотрите, есть ли вызовы на внешние программы, которые вы можете заменить на внутреннюю оболочку или более эффективные конструкции. Я бы не ожидал огромного улучшения скорости, делая это, но у него есть хорошая собственность, которая вы также ускоряете все на стороне 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