Las subcapas tienen sobrecarga.
En mi sistema, el costo mínimo de fork-exec (cuando ejecuta un programa desde el disco cuando el archivo no está frío) es aproximadamente 2ms
y el costo mínimo de bifurcación es de aproximadamente 1ms
.
Con subcapas, está hablando solo del costo de bifurcación, ya que ningún archivo necesita ser exec
edición Si las subcapas se mantienen razonablemente bajas, 1ms
es bastante insignificante en los programas orientados a humanos. Creo que los humanos no pueden notar nada que suceda más rápido que 50ms
(y ese es el tiempo que tardan los intérpretes de lenguaje de secuencias de comandos modernos en comenzar (estoy hablando de python
y rubí en rvm
aquí) con el nodejs
más nuevo ocupando alrededor de 100ms
).
Sin embargo, se suma con los bucles, y entonces es posible que desee reemplazar, por ejemplo, el bactick bastante común o $()
patrón donde return
algo de una función al imprimirlo en la salida estándar para que el shell principal se capture con bashisms como printf -v
(o use un programa externo rápido para procesar todo el lote).
El paquete bash-completion evita específicamente este costo de subcapa al regresar a través de nombres de variables pasados usando una técnica descrita en http://fvue.nl/wiki/Bash:_Passing_variables_by_reference
Comparando
time for((i=0;i<10000;i++)); do echo "$(echo hello)"; done >/dev/null
con
time for((i=0;i<10000;i++)); do echo hello; done >/dev/null
debería darle una buena estimación de lo que sus sistemas fork
-ing sobrecarga es.