Буферизация записи/чтения в файл.

Wicked

Новичок
Буферизация записи/чтения в файл.

Народ, хотелось бы услышать твое аргументированное мнение по поводу того, стоит ли делать буферизацию чтения из (записи в) файла средствами PHP?

Соответственно такие вопросы:
1) Как php и/или os (windows xp) буферизируют окрестности читаемой из файла информации? Покластерно? Поблочно? Может еще как-то?

2) Как php и/или os (windows xp) буферизируют запись в файлы?

3) Хотелось бы услышать по разные буферы... В оперативной памяти (наверное реализуется ос), во встроенном дисковом кэше, ...

4) Что лучше?
PHP:
for ($i = 0; $i < 16; $i++) {
  $buf = fread($fp, 16);
  .. действия..
}
или
PHP:
$buf256 = fread($fp, 16);
for ($i = 0; $i < 16; $i++) {
  $buf = substr($buf256, $i*16, 16);
  .. действия..
}
5) То же самое, только для записи: сначала пишем переменную длины 256, потом ее кидаем в файл одним куском или записывать сразу в файл кусками по 16 байт?

Тема возникла в связи с написанием класса для работы с hashtable'ами, хранимыми в файлах.
 

Screjet

Новичок
"Средства ПХП" = это средства ОСи, на которм работает ПХП.
Оставь буферизацию файлов ОСи (так все делают).

Все ОСи, при чтении, загоняют файл в память, и при повторном чтении, отдают из памяти.
При записи, загоняют в память. И неспеша синхронизируют с содержимым диска.

4) В зависимости от задачи.
Если, кроме порций, по 16б от файла ничего не нужно, тогда первое, иначе = второе.
 

Wicked

Новичок
За, для чтения оказалось не так эффективно...

Зато многоразовая запись гораздо быстрее работает :)
Запись кусочков по 16 байт на рандомную позицию в файл размером 256 байт с использованием обычной строки в качестве буфера в 11.7 раз быстрее, чем прямое использование fseek(), fwrite(). Причем 90% уходит именно на испольнение fwrite().
 
Сверху