El problema con el que se está tropezando no es algún límite arbitrario en Cygwin que pueda hacer desaparecer con un cambio de configuración. Es un aspecto inherente de la forma en que Cygwin tiene que trabajar para lograr que los programas de semántica POSIX generados en virtud de él lo permitan.
La llamada al sistema POSIX fork()
no tiene equivalente nativo en Windows, por lo que Cygwin se ve obligado a emularlo en a very inefficient way. Los scripts de Shell provocan una llamada al fork()
cada vez que ejecutan un proceso externo, lo que ocurre bastante ya que los lenguajes del script del shell son tan pobres en relación con lo que normalmente llamaríamos un lenguaje de programación. Los programas externos son cómo los scripts de shell obtienen algo de consecuencia.
Existen otras ineficiencias en Cygwin, aunque si las perfila, probablemente descubra que esa es la velocidad más alta. En la mayoría de los lugares, la capa de Cygwin entre un programa creado con ella y el sistema operativo subyacente es bastante delgada. Los desarrolladores de Cygwin se toman muchas molestias para mantener la capa lo más delgada posible a la vez que proporcionan la semántica correcta de POSIX. El grosor poco común actual en la emulación de llamada fork()
es inevitable a menos que Microsoft agregue un recurso de tipo nativo fork()
a su sistema operativo. Sus incentivos para hacer eso no son muy buenos.
Las soluciones publicadas anteriormente como comentarios no son malas.
Otra posibilidad es ir a través de la secuencia de comandos drush
y ver si hay llamadas a programas externos que puede reemplazar con intrinsics shell o construcciones más eficientes. No esperaría una gran mejora en la velocidad al hacer eso, pero tiene la buena propiedad de que también acelerará las cosas en el lado de Linux. (fork()
es eficiente en Linux, pero a partir de programas externos sigue siendo una gran velocidad de golpear que puede 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 ...
iría más rápido a medida:
if grep -q somepattern $somefile ; then ...
La primera versión es posiblemente más clara, pero requiere al menos tres invocaciones de programas externos, y con shells primitivos, cuatro. (¿Los ve a todos?) El reemplazo requiere solo una invocación de programa externo.
¿Pegar un CD de ubuntu en? :) – Rimian
Esta pregunta supone que el rendimiento de Windows drush es equivalente a Linux Drush y que la memoria o la CPU son limitadas. Esa no es una suposición evidente: simplemente podría ser más lenta. – msw
Pruebe la virtualización ... con soporte de hardware puede ser realmente increíble –