Ситуация. Происходит обработка исходных данных множеством потоков-обработчиков, выстроенных в в несколько параллельных цепочек/конвейеров. В некоторых местах обмен до 50 метров/сек. Данные - где-то поток байт, где-то пакеты (структуры в памяти тупо) фиксированной/переменной длины.
Какую схему взаимодействия(IPC) выбрать, учитывая:
- С++ + Qt + boost
- возможность задержки на каком-то этапе, т.е. должна присутствовать буферизация
- при возникновении задержки не должна нарушаться целостность передаваемых данных
- обязательно схема 1 производитель - N потребителей
- возможна работа по локальной сети
Чем не нравятся:
- пайпы - низкая скорость в сети, неосязаемая буферизация
- сокеты - непонятно с "1 производитель - N потребителей", снижение пропускной способности сети, неосязаемая буферизация
- циклический буфер - ограниченная буферизация, возможность перезаписи - т.е. бьются данные, о сети речь даж не заходит
Правильно ли я смотрю на все это? Какую схему подобрать?
Судя по всему передача данных потоком через boost::lockfree::queue невозможна, единственный вариант - разбивать на части. Т.е. принял 50 метров, разбил по 1 метру, отправил в очередь. Хотя по сути с new выделится еще столько же...Будет ли поток успевать прокачивать 50М таким образом каждую секунду?
Обновление
Короче, буст локфри, элемент - структура [размер, указатель]
Указатель при этом можно делать шаред_арра
Господа, вы меня ловко обвели вокруг пальца.
Нужен механизм !!!межпроцессного!!! взаимодействия! N производителей, N параллельных потребителей. Потребляют одну и ту же инфу одновревенно. "Бесконечная" буферизация!
Что не так с буст::локфри::кью - как я в другом процессе открою ее?
shared_array. – VladD Jun 30 '15 at 10:20