Das Problem, auf das Sie stoßen, ist nicht irgendein willkürliches Limit in Cygwin, das Sie mit einer Einstellungsänderung verschwinden lassen können. Es ist ein inhärenter Aspekt der Art und Weise, wie Cygwin arbeiten muss, um die POSIX-Semantik-Programme, die unter ihm erstellt werden, zu erwarten.
Der Systemaufruf POSIX fork()
hat unter Windows keine systemeigene Entsprechung, daher muss Cygwin es in a very inefficient way emulieren. Shell-Skripte verursachen jedes Mal, wenn sie einen externen Prozess ausführen, einen Aufruf an fork()
, was ziemlich oft vor sich geht, da die Shell-Script-Sprachen relativ zu dem, was wir normalerweise eine Programmiersprache nennen, so verarmt sind. Externe Programme sind, wie Shell-Skripte etwas Konsequentes tun.
Es gibt noch andere Ineffizienzen in Cygwin, obwohl, wenn Sie es profilierten, würden Sie wahrscheinlich finden, dass das die Nummer eins Geschwindigkeitshit ist. An den meisten Stellen ist die Cygwin-Ebene zwischen einem Programm, das mit ihr erstellt wurde, und dem zugrunde liegenden Betriebssystem ziemlich dünn. Die Entwickler von Cygwin geben sich große Mühe, die Schicht so dünn wie möglich zu halten und dennoch die korrekte POSIX-Semantik zu liefern. Die aktuelle ungewöhnliche Dicke in der fork()
Call-Emulation ist unvermeidlich kurz von Microsoft Hinzufügen einer systemeigenen fork()
Anlage zu ihrem Betriebssystem. Ihre Anreize, das zu tun, sind nicht sehr gut.
Die oben genannten Kommentare sind nicht schlecht.
Eine andere Möglichkeit ist durch das drush
Skript zu gehen und sehen, ob es Gespräche auf externe Programme, die Sie mit Shell-Spezifika oder effizientere Konstrukte ersetzen können. Ich würde nicht eine enorme Geschwindigkeitsverbesserung damit erwarten, aber es hat die nette Eigenschaft, dass Sie die Dinge auch auf der Linux-Seite beschleunigen werden. (fork()
ist effizient auf Linux, aber externe Programme zu starten ist immer noch eine große Geschwindigkeit getroffen, dass Sie vielleicht nicht so oft zu zahlen haben, wie Sie derzeit tun.) Zum Beispiel:
numlines=`grep somepattern $somefile | wc -l`
if [ $numlines -gt 0 ] ; then ...
würde schneller laufen als:
if grep -q somepattern $somefile ; then ...
Die erste Version ist wohl klarer, aber es erfordert mindestens drei externe Programmaufrufe, und mit primitiven Shells, vier. (Sehen Sie alle?) Die Ersetzung erfordert nur einen externen Programmaufruf.
-Stick ein ubuntu CD in? :) – Rimian
Diese Frage setzt voraus, dass die Leistung von Windows Drush Linux Drush entspricht und Speicher oder CPU begrenzt ist. Das ist keine Selbstverständlichkeit: Es könnte einfach langsamer sein. Geben Sie – msw
Virtualisierung einen Versuch ... mit Hardware-Unterstützung kann es wirklich erstaunlich sein –