объединение open (Filename, {delayed_write, Size, Delay}) с индексом - PullRequest
2 голосов
/ 09 ноября 2010

Как я могу объединить открытие (Filename, {delayed_write, Size, Delay}) с индексом, куда записать эти данные?

Я хочу подождать, пока не получу определенное количество данных, а затем записать их в позицию в файле.

Также {read_ahead, Size} является противоположностью {delayed_write, Size, Delay}? Я хотел бы прочитать определенное количество данных для отправки.

Спасибо

1 Ответ

2 голосов
/ 09 ноября 2010

read_ahead является своего рода противоположностью delayed_write в том смысле, что чтение является противоположностью записи.

Если вы хотите читать и отправлять большие куски памяти, вам не нужно читать read_ahead, просто прочитайте большие куски и отправьте их (не так много вызовов os, чтобы сохранить здесь).

Из файла : открыть / 2 man-страницу на read_ahead:

Если вызовы read / 2 предназначены для размеров, не значительно меньших или даже превышающих размер байт, прирост производительности не ожидается.

Вам не нужно указывать и индексировать при открытии. Просто используйте pwrite / 3 или комбинацию position / 2 и write / 2 .

Но запись в разные позиции файла может просто уменьшить усиление delayed_write, поскольку (также man-страница file: open / 2 ):

Буферизованный данные также сбрасываются перед другим файлом выполняется операция записи / 2.

Если у вас есть куски данных для нескольких позиций, соберите их в список {Location, Bytes} и время от времени пишите их с файлом : pwrite / 2 все за один раз. Это может привести к очень эффективному системному вызову writev(2), который записывает несколько фрагментов за один раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...