Минимальная единица хранения диска называется сектор .Для жестких дисков они обычно имеют размер 512 байт (хотя вы также можете найти диски с секторами 4096 байт).
Ваш файл занимает два сектора.
000 078 200 278 400
+--------------+--------------+---...
| ****************
+--------------+--------------+---...
И поскольку блокИнтерес частично к первому сектору, одинаковое количество секторов должно быть прочитано обоими подходами, которые вы описали.
Поскольку чтение данных с диска - это медленная часть, реальной разницы между ними нет.два подхода.
О, но вы используете буферизованный ввод-вывод вместо использования sysread
.При использовании буферизованного ввода-вывода (например, read
) Perl считывает данные из операционной системы порциями по 4 КиБ или 8 КиБ (в зависимости от вашей версии Perl).Таким образом, 8 или 16 секторов загружаются с диска, если вы начинаете чтение с позиции 0, и 9 или 17 секторов загружаются с диска, если вы сначала seek
.Таким образом, пытаясь читать меньше, вы на самом деле читаете больше!
Тем не менее, разница достаточно мала, чтобы разница в скорости была потеряна в шуме.