Подход к обработке массива: оптом или в розницу?
хороший тон - писать по одной через буферизированный stream
хотя для автора наверное не проканает. он небось с этими строчками еще что-то и делает
считывать тоже лучше по одной через буферизированный stream
а в чем профит? поясни
логика - процесс обработки, не смешивается с физикой - буферизацией
cat /proc/sys/vm/dirty_writeback_centisecs
500
ну хз, как-то нашел в тестирующем коде функцию, которая считывала файл в холостую (ну чтобы как раз все эти системные кэши заставить его запомнить, ну так, на всякий случай так вот, при считывании поблочно блоками в несколько килобайт получается заметно быстрее, чем при побайтном (так было раньше).
cat /proc/sys/vm/dirty_writeback_centisecs 500Теплое... Мягкое... какая в жопу разница.
При чтении логично, что так.... этот параметр к записи относится.
Я ж и не утверждаю, что я тут знаю больше других. Это вообще-то вопрос был. Поясни уж почему тёплое и мягкое. По мне так это параметр, отвечающий за периодичность реального сброса данных на диск, которые с точки зрения прикладной программы уже записаны. То есть тот самый буфер.
Профита от твоей настройки я не вижу ни при каком ее значении. Если ты пишешь много данных быстро, то сначала упрешься в заполнение дискового кэша ОС, которая сразу станет сбрасывать данные на диск, не принимая новые данные для записи, и ты тупо упрешься в скорость диска. А если ты пишешь данные не быстро, не заполняя буфер, то тебе должно быть все равно, когда они реально попадут на диск.
Т.е. если задача быстро скинуть данные на диск и забыть, то тут разве что буфер ОС можно увеличить, чтобы все сразу влезло, а потом пусть ОС разбирается, когда на диск пихнуть.
А софтовый stream буфер дает профит в том, что ты работаешь чисто со строками, не мучаясь памятью и заполнением/очищением буфера. При этом буфер дает профит в том, что ты реже вызываешь системные вызовы write, которые могут создавать основное торможение.
Наверное ты слово "физика" слишком буквально воспринял
По мне так это параметр, отвечающий за периодичность реального сброса данных на диск, которые с точки зрения прикладной программы уже записаны.ты прав, но системный вызов стоит дорого, поэтому на практике правы возбу и дг.
то есть там есть две разных физики - физика железки и физика переключений контекста.
против обеих полезно кешироваться, хотя вторая кажется иллюзорной (ах, эти ваши линуксы так несовершенны).
Да уж, под физикой я как-то понял только непосредственную запись на диск, забыв о том, что вызов write - не простой вызов функции. Спасибо обоим за пояснения.
Оставить комментарий
roman-us
Какой подход больше соответствует хорошему тону: получить массив из 2000 строк(заполнив оперативку) и записать его в файл одной операцией или каждую из 2000 строк последовательно записывать в файл?