GNU/Linux >> Znalost Linux >  >> Linux

Jaká je režie používání subshellů?

Subshells mají režii.

V mém systému jsou minimální náklady na fork-exec (když spouštíte program z disku, když soubor není studený) asi 2ms a minimální cena rozvětvení je asi 1ms .

U subshellů mluvíte pouze o ceně rozvětvení, protože žádný soubor nemusí být exec vyd. Pokud jsou podskořápky udržovány na rozumně nízké úrovni, 1ms je v programech zaměřených na člověka zcela zanedbatelný. Věřím, že lidé si nemohou všimnout ničeho, co se děje rychleji než 50ms (a tak dlouho trvá, než se moderní interpreti skriptovacích jazyků vůbec spustí (mluvím python a ruby ​​v rvm zde) s nejnovějším nodejs zabírající kolem 100ms ).

Sčítá se však se smyčkami a pak možná budete chtít nahradit například poměrně běžné bactic nebo $() vzor, ​​kde jste return něco z funkce jejím vytištěním na stdout pro nadřazený shell, aby bylo možné vylepšit bashismy jako printf -v (nebo použijte rychlý externí program ke zpracování celé dávky).

Balíček bash-completion se konkrétně vyhýbá těmto nákladům na subshell tím, že se vrací přes předané názvy proměnných pomocí techniky popsané na http://fvue.nl/wiki/Bash:_Passing_variables_by_reference

Porovnávám

time for((i=0;i<10000;i++)); do echo "$(echo hello)"; done >/dev/null 

s

time for((i=0;i<10000;i++)); do echo hello; done >/dev/null 

by vám měl poskytnout dobrý odhad toho, co vaše systémy fork -ing režie je.


Linux
  1. Jaké DNS servery používám?

  2. Jaký je nejjednodušší způsob, jak SSH používat Python?

  3. Co znamená POSIX?

  1. Jaký je rozdíl v přesměrování výstupu pomocí >, &>, >&a 2&>?

  2. Jaký je smysl použití linuxového makra access_ok()

  3. Jaký je rozdíl mezi použitím `sh` a `source`?

  1. Jak zjistím, co zabírá veškerý prostor na mém / oddílu?

  2. Co brání distribucím používat nejnovější linuxové jádro?

  3. Co je to souborový systém NSFS?