Цитата(XWoo @ Oct 20 2015, 15:26)

CrimsonPig, спасибо за ответ.
А вот если мне надо писать периодически большой объём данных, пришедших, скажем, от ацп и делать это как можно ближе к реальному времени... Как быть? Вот накопил я буфер с несколькими килобайтами данных и пока их пишу на флэшку, сама эта функция записи весь мой реал и "убьёт" (пол секунды - это много). Что делать? Ведь сам ацп заполняет буфер очень быстро, а запись в файл идёт очень медленно.
Ээээ... если у вас данные поступают со средней скоростью 5Мб\с а средняя скорость записи в файл 2Мб\с то выход один - писать данные в /dev/null

Если средняя скорость записи в файл все-таки больше средней скорости поступления данных, то можно использовать очередь из несколько буферов, заполнять их данными в одном "процессе" и в бэкграунде или другом "процессе" писать буфера на диск и возвращать в список "пустых". По-моему похожая тема тут совсем недавно обсуждалась.
а, да.. есть всякие мелкие хитрости, которые на элементарных файловых системах типа фата позволяют слегка улучшить производительность, но это не панацея, проблемы в консерватории они не решают...
Например:
- писать данные большими блоками, кратными размеру _кластера_ файловой системы (а не размеру сектора физического носителя)
- заранее увеличить длинну файла до нужного значения (в идеале) или увеличивать размер файла большими кусками сначала, а данные писать в него потом (сначала будет выделена цепочка кластеров, а запись в нее будет вестить без отвлекания на манипуляции с FAT. Если повезет, уменьшается фрагментация файловой системы)
- правильно выбрать параметры (размер кластера, выравнивание) файловой системы (форматирование СД карточек специально предназначенными для этого тулзами, например)
Сообщение отредактировал CrimsonPig - Oct 20 2015, 14:42