Domanda

Sono stato in esecuzione Drush script (per Drupal ) con Cygwin sul mio Windows relativamente veloce macchina, ma devo ancora aspettare circa un minuto per qualsiasi comando Drush (nello specifico la cache Drush chiaro per l'esecuzione).

Sono abbastanza sicuro che abbia qualcosa a che fare con la velocità di Cygwin da quando i miei colleghi sviluppatori (che eseguono Linux) in grado di eseguire questi script in circa 5 secondi.

C'è un modo per rendere Cygwin utilizzare più memoria e / o CPU per ogni terminale?

È stato utile?

Soluzione

Il problema si sta eseguendo in non è un limite arbitrario in Cygwin che si può fare andare via con un modifica delle impostazioni. Si tratta di un aspetto inerente il modo Cygwin deve lavorare per ottenere i programmi semantica POSIX costruite sotto lo aspettano.

La chiamata di sistema fork() POSIX non ha equivalenti nativo su Windows, in modo da Cygwin è costretto ad emulare in un modo molto inefficiente . Gli script di shell causano una chiamata a fork() ogni volta che eseguono un processo esterno, che avviene un bel po 'dal momento che i linguaggi di script di shell sono così impoverita rispetto a quello che avremmo normalmente chiamiamo un linguaggio di programmazione. programmi esterni sono come gli script di shell ottiene nulla di importante fatto.

Non ci sono altre inefficienze a Cygwin, ma se si è profilato, si sarebbe probabilmente trovare che questo è il numero uno colpito velocità. Nella maggior parte dei luoghi, lo strato di Cygwin tra un programma costruito con esso e il sistema operativo sottostante è piuttosto sottile. Gli sviluppatori di Cygwin prendere un sacco di dolori per mantenere lo strato più sottile possibile, pur fornendo la semantica POSIX corrette. La corrente lo spessore non comune nell'emulazione chiamata fork() è breve inevitabile di Microsoft aggiunta di un impianto di tipo fork() locale del proprio sistema operativo. I loro incentivi da fare che non sono molto buone.

Le soluzioni postato sopra come commenti non sono male.

Un'altra possibilità è quella di passare attraverso lo script drush e vedere se ci sono chiamate a programmi esterni è possibile sostituirli con intrinseche della shell o costrutti più efficienti. Non mi aspetto un miglioramento enorme velocità per farlo, ma ha la proprietà bello che ti accelerare le cose sul lato Linux. (fork() è efficiente su Linux, ma l'avvio di programmi esterni è ancora un grande velocità ha colpito che non si potrebbe essere necessario pagare le volte che si fa attualmente.) Ad esempio:

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

sarebbe correre più veloce come:

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

La prima versione è probabilmente più chiara, ma richiede almeno tre invocazioni programma esterne, e con conchiglie primitivi, quattro . (Vedete tutti loro?) La sostituzione richiede una sola invocazione programma esterno.

Altri suggerimenti

Anche guardare cose che rallentano l'avvio Cygwin:

  • rintuzzare PATH di Windows (per le ossa nude come% SystemRoot% \ system32;% SystemRoot%)
  • Rimuovi le cose non è necessario da bashrc e bash_profile
  • Spostare cose che avete bisogno solo nella finestra del terminale da bashrc a bash_profile
  • Una volta sorprendentemente grande aspirare Cygwin è il completamento di Bash. Se lo si utilizza (e si dovrebbe, perché è grande), solo il completamento fonte per i comandi necessari (piuttosto che tutti loro che ha usato per essere il default). E, come già detto, loro fonte da bash_profile, non bashrc.

Si può dare Cygwin una priorità più alta.

Scrivi un nuovo file batch, ad esempio, "cygstart.bat" con il seguente contenuto:

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

L'interruttore /high dà il guscio una priorità di processo più alta.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top