GNU/Linux >> Linux Esercitazione >  >> Linux

Qual è l'overhead dell'utilizzo di subshell?

Le subshell hanno un sovraccarico.

Sul mio sistema, il costo minimo di fork-exec (quando si esegue un programma dal disco quando il file non è freddo) è di circa 2ms e il costo minimo del fork è di circa 1ms .

Con le subshell, stai parlando solo del costo del fork, poiché nessun file deve essere exec ed. Se le subshell sono mantenute ragionevolmente basse, 1ms è abbastanza trascurabile nei programmi rivolti all'uomo. Credo che gli umani non possano notare nulla che accade più velocemente di 50ms (ed è quanto tempo impiegano i moderni interpreti di linguaggi di scripting anche solo per iniziare (sto parlando di python e rubino in rvm qui) con il nodejs più recente occupando circa 100ms ).

Tuttavia, si somma con i loop, e quindi potresti voler sostituire ad esempio il piuttosto comune batick o $() pattern dove si return qualcosa da una funzione stampandolo su stdout affinché la shell genitore possa catpure con bashismi come printf -v (o utilizzare un programma esterno veloce per elaborare l'intero batch).

Il pacchetto bash-completion evita specificamente questo costo della subshell restituendo tramite nomi di variabili passati usando una tecnica descritta su http://fvue.nl/wiki/Bash:_Passing_variables_by_reference

Confronto

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 

dovrebbe darti una buona stima di ciò che i tuoi sistemi fork -ing overhead è.


Linux
  1. Rileva il sistema Init usando la shell?

  2. Qual è la differenza nel reindirizzare un output usando >, &>, >&e 2&>?

  3. Che senso ha usare la macro linux access_ok()

  4. Qual è la differenza tra l'uso di `sh` e `source`?

  5. Cosa impedisce alle distribuzioni di utilizzare l'ultimo kernel Linux?

Utilizzo del file di configurazione SSH

Che cos'è la shell in Linux?

Come determinare cosa sta utilizzando più spazio su disco su un server Linux?

Qual è la differenza tra l'utilizzo di _exit() e exit() in un fork-exec Linux convenzionale?

Qual è la differenza tra l'installazione di un pacchetto usando pip e apt-get?

Come faccio a sapere cosa sta occupando tutto lo spazio sulla mia partizione /?