Pergunta

Eu tenho executado drush scripts (para Drupal) com Cygwin Na minha máquina Windows relativamente rápida, mas ainda tenho que esperar cerca de um minuto Para qualquer comando drush (especificamente cache drush limpo executar).

Tenho certeza de que tem algo a ver com a velocidade do Cygwin, já que meus colegas desenvolvedores (que estão executando o Linux) podem executar esses scripts em cerca de 5 segundos.

Existe uma maneira de fazer com que a cygwin use mais memória e/ou CPU por terminal?

Foi útil?

Solução

O problema em que você está enfrentando não é um limite arbitrário no cygwin que você pode fazer com que as configurações mudem. É um aspecto inerente da maneira como a Cygwin precisa trabalhar para criar os programas de semântica da POSIX sob ele.

O posix fork() A chamada do sistema não tem equivalente nativo ao Windows, então o cygwin é forçado a imitá -lo em uma maneira muito ineficiente. Scripts de shell causam uma chamada para fork() Toda vez que eles executam um processo externo, o que acontece bastante, pois as linguagens de scripts do shell são tão empobrecidas em relação ao que normalmente chamamos de linguagem de programação. Os programas externos são como os scripts do shell são feitos de conseqüência.

Existem outras ineficiências em Cygwin, embora, se você o perfil, provavelmente descobriria que esse é o número de velocidade número um. Na maioria dos lugares, a camada de cygwin entre um programa construído usando -o e o sistema operacional subjacente é bastante fino. Os desenvolvedores do Cygwin se esforçam para manter a camada o mais fina possível, enquanto ainda fornecem semântica correta do POSIX. A atual espessura incomum no fork() A emulação de chamadas é inevitável antes da Microsoft adicionar um nativo fork() Digite a instalação para o seu sistema operacional. Seus incentivos para fazer isso não são muito bons.

As soluções postadas acima como comentários não são ruins.

Outra possibilidade é passar pelo drush Script e veja se existem chamadas para programas externos que você pode substituir por intrínsecos de shell ou construções mais eficientes. Eu não esperaria uma enorme melhoria de velocidade ao fazer isso, mas tem a bela propriedade que você também acelera o lado do Linux. (fork() é eficiente no Linux, mas iniciar programas externos ainda é um grande sucesso de velocidade que você pode não precisar pagar quantas vezes o que faz.) Por exemplo::

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

funcionaria mais rápido como:

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

A primeira versão é indiscutivelmente mais clara, mas requer pelo menos três invocações de programa externas e com conchas primitivas, quatro. (Você vê todos eles?) A substituição requer apenas uma invocação externa do programa.

Outras dicas

Veja também coisas que diminuem a velocidade da startup de Cygwin:

  • Apare o caminho do seu Windows (para os ossos nus como%Systemroot% System32;%Systemroot%)
  • Remova as coisas que você não precisa do Bashrc e Bash_profile
  • Mova as coisas que você só precisa na janela do terminal do Bashrc para Bash_profile
  • Um tempo surpreendentemente grande sugando o cygwin é a conclusão da basquete. Se você o estiver usando (e deve, porque é ótimo), apenas a conclusão da fonte para os comandos necessários (em vez de todos eles que costumavam ser o padrão). E, como mencionado acima, obtenha -os de bash_profile, não bashrc.

Você pode dar à Cygwin uma prioridade mais alta.

Escreva um novo arquivo em lote, por exemplo, "cygstart.bat" com o seguinte conteúdo:

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

o /high O Switch oferece ao shell uma prioridade mais alta do processo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top