Bash в то время как чтение цикла очень медленно по сравнению с кошкой, почему?
Простой тестовый скрипт здесь:
while read LINE; do
LINECOUNT=$(($LINECOUNT+1))
if [[ $(($LINECOUNT % 1000)) -eq 0 ]]; then echo $LINECOUNT; fi
done
Когда я делаюcat my450klinefile.txt | myscript
процессор зависает на 100% и может обрабатывать около 1000 строк в секунду. Около 5 минут, чтобы обработать то, чтоcat my450klinefile.txt >/dev/null
делает в полсекунды.
Есть либолее эффективный способ сделать по существу это. Мне просто нужно прочитать строку из stdin, посчитать байты и записать ее в именованный канал. Но скорость даже этого примера невероятно медленная.
Для каждого 1 Гб входных строк мне нужно выполнить несколько более сложных действий сценариев (закрыть и открыть некоторые каналы, на которые передаются данные).