Warum sind die Here-Strings in Bash langsamer, als die Eingabe an einen Befehl zu übergeben?

715
static

Ich habe die Ausführungszeit für die Eingabe von Unix-Here-Strings und Pipe-Daten mit bcfolgenden Werten verglichen :

Rohr

time for i in  do echo "sqrt(5.09)" | bc -q > /dev/null done   real 0m3.584s user 0m0.899s sys 0m2.404s 

vs

Hier-Saiten

time for i in  do bc -q <<< "sqrt(5.09)" > /dev/null done  real 0m5.137s user 0m0.686s sys 0m2.262s 

(diese Werte sind durchschnittlich: viele Male getestet)

Die realAusführungszeit bei Verwendung von Here-Strings ist also größer als bei Verwendung der Pipes, aber die Summe der user+ sysZeiten ist bei Here-Strings immer noch geringer als ich ursprünglich erwartet hatte (Echo ... | wird in einem neuen Prozess ausgeführt. es liegt also ein Ausführungsaufwand vor. Warum so ein seltsames Verhalten von bash?

2

0 Antworten auf die Frage