Bash: Performance Tricks: Unterschied zwischen den Versionen

Aus Hergipedia
Zur Navigation springen Zur Suche springen
 
(6 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 2: Zeile 2:


Shell-Skripte können im Vergleich zu "echten" Programmen regelrechte
Shell-Skripte können im Vergleich zu "echten" Programmen regelrechte
Performancefallen enthalten, die nicht offensichtlich sind. Diese können
Performancefallen enthalten, die nicht offensichtlich sind.
auf einfachste Weise erheblich "getunt" werden, wobei z.T.  
 
Diese können auf einfachste Weise erheblich "getunt" werden, wobei z.T.  
Geschwindigkeit-Steigerung um den Faktor 1000 und mehr möglich sind.
Geschwindigkeit-Steigerung um den Faktor 1000 und mehr möglich sind.
Viele Dinge, die unter Linux "schnell genug" sind, werden unter
Cygwin "zu langsam", was diese Plattform zu einem guten Benchmark macht.


Praxisbeispiele:  
Praxisbeispiele:  
Zeile 10: Zeile 13:
* [[SSH-Tunnel#Beispielscript_zur_Automatisierung | unser Tunnelskript ]]
* [[SSH-Tunnel#Beispielscript_zur_Automatisierung | unser Tunnelskript ]]


Gerade unter cygwin ist die Ursache meist der unnötige Aufruf externer Programme  
Die Ursache ist meist der unnötige Aufruf externer Programme  
aus dem Skript eraus. Als Beispiel 20 Dateien in einem Verzeichnis angezeigt werden.
aus dem Skript heraus. Abhilfe schaffen einige Tricks, in der
 
Reihenfolge einfach und effizient zu kompliziert und ineffizient.
<source lang=bash>
  mkdir bash-performance-tricks
  cd bash-performance-tricks
  for ((i=0; i<20; ++i )); do echo "Hallo Welt" > $i.txt; done
</source>
 
=== einzeln innerhalb einer Schleife ===
 
  # cygwin
  time for i in *.txt; do ls -l $i; done
  ...
  real    0m6.810s
  user    0m0.820s
  sys    0m3.880s
 
=== in einem Rutsch ===


  # cygwin
<onlyinclude>
  time ls -l *.txt
# [[Bash-Tricks: Zusammenfassen externer Kommandos|Zusammenfassen von externen Kommandos]]: <s>for i in *; ls $i; done</s>
  ...
# [[Bash-Tricks: grep Ersetzen durch =~ | grep Ersetzen durch =~ ]]: <s> ... | grep abc.txt</s>
  real    0m0.400s
# [[Bash-Tricks: cat Ersetzen durch Umleitungsoperator| cat Ersetzen durch < ]]: <s>cat abc.txt</s>
  user    0m0.040s
</onlyinclude>
  sys    0m0.230s

Aktuelle Version vom 13. Januar 2010, 13:36 Uhr

Synopsis

Shell-Skripte können im Vergleich zu "echten" Programmen regelrechte Performancefallen enthalten, die nicht offensichtlich sind.

Diese können auf einfachste Weise erheblich "getunt" werden, wobei z.T. Geschwindigkeit-Steigerung um den Faktor 1000 und mehr möglich sind. Viele Dinge, die unter Linux "schnell genug" sind, werden unter Cygwin "zu langsam", was diese Plattform zu einem guten Benchmark macht.

Praxisbeispiele:

Die Ursache ist meist der unnötige Aufruf externer Programme aus dem Skript heraus. Abhilfe schaffen einige Tricks, in der Reihenfolge einfach und effizient zu kompliziert und ineffizient.


  1. Zusammenfassen von externen Kommandos: for i in *; ls $i; done
  2. grep Ersetzen durch =~ : ... | grep abc.txt
  3. cat Ersetzen durch < : cat abc.txt