[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

структура программы



тут такая задачка есть:

имеем некоторый девайс который генерит поток данных
поток с довольно большим и переменным битрейтом

надо этот поток сохранять в файлы (в переспективе в БД) фиксированного
размера. имена файлов будут нечто вроде текущего времени на момент
сохранения блока.

сейчас структурно сделано примерн следующий алгоритм:

0. стартовые параметры:
0.1 имеем блок-буффер равный размеру выходного файла (N байт)
0.2 имеем процесс читающий устройство

1. читаем данные из устройства до заполнения буфера (N байт)
2. форкаемся
3. родитель переходит к п.1
4. дочка записывает данные в файл (БД)
5. дочка завершает работу

у устройства выходные буферы небольшие, если не форкаться, то мы теряем
данные на шаге 2.
данные идут с разной скоростью, иногда скорость превышает скорость
записи на диск (но интегральная скорость cущественно меньше), поэтому 
надежность системы обеспечена количеством ОЗУ (то есть ОЗУ надо выбрать 
столько чтобы в него помещались данные когда они идут большими дозами)

вот теперь я думаю как оптимизировать алгоритм

насколько я понимаю на шагах 2-3-4 система будет делать копирование данных
в памяти, поскольку родитель начал уже использовать тот же блок который
дочка пишет в БД/файл.

как можно избежать копирования? и вообще насколько [не]эффективной
представляется данная структура алгоритма специалистам? если делать в
каждом цикле запрос блока памяти у системы и возврат ее обратно то как
будет выглядеть (фрагментирована) память у основного родителя через
некоторое время работы? где об этом можно почитать?


PS: смотрел я как работает система - максимум дочек накапливается около
20 штук, то есть скорость потока "пляшет", однако интегральный запас ОЗУ
получается очень большим.



Reply to: