Bash podczas odczytu pętli bardzo powolny w porównaniu do kota, dlaczego?
Prosty skrypt testowy tutaj:
while read LINE; do
LINECOUNT=$(($LINECOUNT+1))
if [[ $(($LINECOUNT % 1000)) -eq 0 ]]; then echo $LINECOUNT; fi
done
Kiedy robięcat my450klinefile.txt | myscript
CPU blokuje się na 100% i może przetwarzać około 1000 linii na sekundę. Około 5 minut na przetwarzanie tegocat my450klinefile.txt >/dev/null
robi to za pół sekundy.
Czy jestbardziej wydajny sposób zrobić zasadniczo to. Po prostu muszę odczytać linię ze standardowego wejścia, policzyć bajty i wypisać ją w nazwanym potoku. Ale szybkość nawet tego przykładu jest niemożliwie powolna.
Co 1 Gb linii wejściowych muszę wykonać kilka bardziej złożonych akcji skryptowych (zamknij i otwórz kilka potoków, do których dane są przesyłane).