Проблема, с которой вы столкнулись, не является произвольным пределом в Cygwin, что вы можете уйти с изменением настроек. Это неотъемлемый аспект того, как Cygwin должен работать, чтобы получить построенные под ним программы семантики POSIX.
Системный вызов POSIX fork()
не имеет нативного эквивалента в Windows, поэтому Cygwin вынужден эмулировать его в a very inefficient way. Сценарии оболочки вызывают вызов fork()
каждый раз, когда они выполняют внешний процесс, что происходит довольно часто, поскольку языки сценария оболочки настолько обедневшие относительно того, что мы обычно называем языком программирования. Внешние программы - это то, как сценарии оболочки получают что-то из последствий.
В 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 ...
Первая версия, возможно, более четкая, но для нее требуются как минимум три внешних вызова программы, а также примитивные оболочки четыре. (Вы видите их все?) Для замены требуется только один вызов внешней программы.
Прикрепите компакт-диск ubuntu? :) – Rimian
Этот вопрос предполагает, что производительность drush для Windows эквивалентна linux drush и ограничена памятью или процессором. Это не само собой разумеющееся предположение: это может быть просто медленнее. – msw
Дайте виртуализации попробовать ... с поддержкой аппаратного обеспечения, это может быть действительно удивительно –