Pregunta

He estado corriendo Drush guiones (por ventanas Drupal ) con Cygwin en mi relativamente rápido máquina, pero todavía tengo que esperar alrededor de un minuto para cualquier comando drush (específicamente drush caché borrar para ejecutar).

Estoy bastante seguro de que tiene algo que ver con la velocidad de Cygwin ya que mis colegas desarrolladores (que ejecutan Linux) pueden ejecutar estos scripts en aproximadamente 5 segundos.

¿Hay una manera de hacer Cygwin utilizar más memoria y / o CPU por terminal?

¿Fue útil?

Solución

El problema que se está ejecutando en no es un límite arbitrario en Cygwin que se puede hacer desaparecer con un cambio de configuración. Es un aspecto inherente a la forma en Cygwin tiene que trabajar para conseguir programas de la semántica POSIX construidos bajo que esperar.

La llamada al sistema fork() POSIX no tiene equivalente nativo en Windows, por lo Cygwin se ve obligado a emular en una manera muy ineficiente . shell scripts causan una llamada a fork() cada vez que se ejecutan un proceso externo, que pasa mucho desde los lenguajes de script de shell son tan pobres en relación con lo que normalmente llamaríamos un lenguaje de programación. Los programas externos son la forma en secuencias de comandos shell conseguir nada importante hecho.

Hay otras ineficiencias en Cygwin, aunque si se perfila, es probable que iba a encontrar que ese es el número uno velocidad. En la mayoría de los lugares, la capa de Cygwin entre un programa de construcción de usarlo y el sistema operativo subyacente es bastante delgada. Los desarrolladores de Cygwin requieren de mucho cuidado en mantener la capa lo más fina posible sin dejar de ofrecer la semántica POSIX correctas. El espesor raro actual en la emulación de la llamada es corta fork() inevitable de Microsoft adición de una instalación de tipo fork() autóctona de su sistema operativo. Sus incentivos para hacer que no son muy buenas.

Las soluciones publicado anteriormente como los comentarios no son malas.

Otra posibilidad es que pasar por el guión drush y ver si hay llamadas a programas externos se pueden sustituir con las características intrínsecas de concha o construcciones más eficientes. Yo no esperaría una enorme mejora en la velocidad al hacer eso, pero tiene la propiedad agradable que usted va a acelerar las cosas en el lado de Linux también. (fork() es eficiente en Linux, pero a partir de programas externos sigue siendo un gran éxito velocidad que es posible que no tenga que pagar tan a menudo como lo hace actualmente.) Por ejemplo:

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

correría más rápido a medida:

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

La primera versión es sin duda más clara, pero requiere al menos tres invocaciones de programas externos, y con conchas primitivas, cuatro . (¿Ves todos ellos?) La sustitución requiere sólo una invocación programa externo.

Otros consejos

También se fijan en cosas que retrasan el inicio de Cygwin:

  • recortar sus PATH de Windows (a los huesos desnudos como% SystemRoot% \ system32;% SystemRoot%)
  • Eliminar cosas que no necesitas a .bashrc y .bash_profile
  • Las cosas se mueven sólo se necesitan en su ventana de terminal desde bashrc a bash_profile
  • Una vez sorprendentemente grande chupar en Cygwin es Bash finalización. Si usted lo está utilizando (y que debe debido a que es genial), única fuente de finalización de los comandos que necesita (más que todos ellos, que solía ser el valor por defecto). Y, como se mencionó anteriormente, la fuente de ellas bash_profile, no bashrc.

Se puede dar una mayor prioridad Cygwin.

Escribir un nuevo archivo por lotes, por ejemplo, "cygstart.bat" con el siguiente contenido:

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

El interruptor /high da la cáscara de una prioridad de proceso superior.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top