GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Was ist der Overhead bei der Verwendung von Subshells?

Subshells haben Overhead.

Auf meinem System betragen die minimalen Fork-Exec-Kosten (wenn Sie ein Programm von der Festplatte ausführen, wenn die Datei nicht kalt ist) etwa 2ms und die minimalen Forking-Kosten betragen etwa 1ms .

Bei Subshells sprechen Sie nur von den Forking-Kosten, da keine Datei exec sein muss ed. Wenn die Subshells angemessen niedrig gehalten werden, 1ms ist in benutzerorientierten Programmen ziemlich vernachlässigbar. Ich glaube, Menschen können nichts bemerken, was schneller als 50ms passiert (und so lange dauert es in der Regel, bis moderne Skriptsprachen-Interpreter überhaupt anfangen (ich spreche von python und Rubin in rvm hier) mit dem neusten nodejs ungefähr 100ms einnehmen ).

Allerdings summiert es sich bei Schleifen, und dann möchten Sie vielleicht zum Beispiel das eher übliche Bactick oder $() ersetzen Muster, wo Sie return etwas aus einer Funktion, indem Sie es auf stdout ausgeben, damit die übergeordnete Shell mit Bashismen wie printf -v catpure (oder verwenden Sie ein schnelles externes Programm, um den gesamten Stapel zu verarbeiten).

Das bash-completion-Paket vermeidet speziell diese Subshell-Kosten, indem es über übergebene Variablennamen zurückgibt, wobei eine Technik verwendet wird, die unter http://fvue.nl/wiki/Bash:_Passing_variables_by_reference

beschrieben wird

Vergleich

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

mit

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

sollte Ihnen eine gute Einschätzung dessen geben, was Ihr System fork ausmacht -ing Overhead ist.


Linux
  1. Welche DNS-Server verwende ich?

  2. Der wahre Vorteil der Verwendung von UUIDs?

  3. Was ist der einfachste Weg zu SSH mit Python?

  4. Was bedeutet POSIX?

  5. Was ist der Unterschied beim Umleiten einer Ausgabe mit >, &>, >&und 2&>?

Verwenden der SSH-Konfigurationsdatei

Was ist die Shell unter Linux?

Wie kann festgestellt werden, was auf einem Linux-Server den meisten Speicherplatz belegt?

Was ist der Unterschied zwischen der Verwendung von „sh“ und „source“?

Wie finde ich heraus, was den ganzen Speicherplatz auf meiner /-Partition belegt?

Was ist der Goldlinker?