"Fat-Zer" написал:
это уже куда помещается строка для того, чтобы над ней магию творить...
ну куда-то в этот буфер. Там довольно-таки запутанный код, я в нём когда-то разобрался, но сейчас уже не помню подробностей.
"Fat-Zer" написал:
поверю на слово...
просто код sed написан исходя именно из этого соображения.
"Fat-Zer" написал:
оптимальней c точки зрения кол-ва вызовов read(2)... ИМХО это может и даёт разницу в скорости...
может и так.
"Fat-Zer" написал:
а мне бабушка рассказывала, что после первого чтения файл с большой вероятностью он останется в кеше
при чём тут это?
Ещё раз: файл читается с HDD/SSD
первый раз. Его нет в кеше.
В этом случае, процесс чтения файла с носителя идёт параллельно вычислениям.
Но вычисления быстрее чтения.
Потому скорость работы НИКАК не зависит от скорости вычисления.
Ну вот вам такой пример: корабль плывёт по морю, и его курс прокладывает капитан корабля.(ну или там штурман, я не в курсе). Время плавания никак не зависит от того, с какой скоростью прокладывается курс, от скорости прокладки курса зависит только количество свободного времени капитана.
А если файл в кеше, то непонятно, зачем его второй раз грепать?
Конечно, более тяжёлой будет ситуация, если файл сжат. Во первых процессор будет занят ещё и распаковкой, во вторых читать надо будет значительно меньше(т.к. грепать имеет смысл только текст, а текст хорошо жмётся). Вот тут я точно не знаю, но скорее всего, всё равно CPU будет быстрее, т.к. тексты не сильно-то и жмутся, на распаковку не очень-то много и надо, и главное — процессор очень быстрый, по сравнению даже с памятью.
PS: странные результаты в вашем тесте скорее всего объясняются тем, что grep как-то смогла mmap'нуть файл, а вот все остальные утилиты файл честно копировали в свой буфер, и именно на это потратили время. А время именно обработки регулярки настолько ничтожное, что в тесте даже не заметно.