W wielu dystrybucjach linuxa bash jest używany jako standardowy shell do wykonywania skryptów, dlaczego to nie jest najlepszy pomysł, zobaczycie poniżej.

Do konkursu przystąpili:

  • bash 3.2.39
  • tcsh 6.15
  • mksh R36
  • ksh93 20081104
  • freebsd 7.0 /bin/sh

Testy wykonywane były na maszynie z procesorem athlon64 4200+ i 2GB ramu 800MHz CL4.

Jako system operacyjny posłużył FreeBSD 7.0 i386. Testowane powłoki były kompilowane z flagami -O2 -march=athlon-mp. Każdy pomiar był powtórzony trzy razy, po czym wyciągana była średnia. Komputer pomiędzy pojedynczymi pomiarami był restartowany.

Za skrypt testowy posłuży nam prosta pętla for wykonywana 1 000 000 i 10 000 000 razy.

Wyniki:

1 000 000 10 000 000
bash 8.03s 89.42s
tcsh 30.26s 303.10s
mksh 2.19s 21.73s
ksh93 1.63s 16.37s
sh 1.60s 16.38s

Jak widać bash wypada tutaj dość słabo, wiec nie rozumiem dlaczego właśnie w nim wykonywane są skrypty w wielu dystrybucjach, jedynym wytłumaczeniem może być to, ze deweloperzy chcą zachować maksymalna kompatybilność ze skryptami, które w tym shellu mogą być wykonywane. Dobrym wyjściem z sytuacji jest metoda użyta we FreeBSD, gdzie większość skryptów jest uruchamianych przez /bin/sh, natomiast bash jest wykorzystywany tylko, gdy występują błędy przy uruchomieniu na /bin/sh. Wyników uzyskanych przez tcsh nie komentuję.

Artykułem tym chciałem wykazać ze nie powinno się używać basha do uruchamiania skryptów, bo oczywiście nie zauważymy różnicy w wydajności podczas pracy w trybie interaktywnym miedzy żadną para porównywanych powłok. Oczywiście rzadko tez się zdarza aby w skrypcie pętla była wykonywana 1 000 000 razy, jednak trzeba mieć na uwadze, ze skrypty maja zwykle więcej linii niż ten testowy.

Archiwalny news dodany przez użytkownika: Magik.
Kliknij tutaj by zobaczyć archiwalne komentarze.

Oznaczone jako → 
Share →