делаю систему сбора данных для физ установки, сейчас возникла нужда изучить сабж, хочу нарисовать generic-interface, легко адаптируемый под специфичный планировщик, задача больше для архитектора, коим мне и приходится быть. Расклад такой:
* есть фифо в виде темплейта, параметрами коей являются тип хранимых данных, индексный тип (для счётчиков/размеров), операция смещения (functor), data storage, block states. Фифо непростая, иначе бы не стал её делать, хранит данные блоками произвольной длины (кратной типу), причём каждый блок может увеличиваться в несколько приёмов, для чего и нужна операция смещения, чтобы сместить блок, если он вылез за верхнюю границу буфера (буфер тоже разный мб - сплошной кусок или порезанный на равные куски). Выделение/освобождение блоков - операция конкурентная и может выполняться в разных тредах/процессах одновременно, по сути получился template-конструктор, подставляя разные параметры в который получается фифо для разных типов данных/хранилищ данных/синхро-примитивов. Реализовал для тредов (pthreads/boost::thread), UNIX processes, зашла речь об distributed fifo, вот тут и возник сабж.
* описанние фифо помещено для понимания, что хотелось бы написать интерфейс для "слейва ввода-вывода" подобный вышеописанному темплейту, параметрами которого дб коротенькие (как и в случае фифо) классы (тем не менее содержащие весь необходимый функционал), реализующие конкретный специфичный случай, например: асинхронный ввод-вывод в том же треде (когда слейв как dedicated поток управления отсутствует), или в slave треде/процессе, балансировка нагрузки если несколько разных фифо обслуживаются одним IO slave, фифо дублируемое на mirror hosts и тд. Изучаю разный софт по теме: http://www.monkey.org/~provos/libevent/, http://liboop.ofb.net/. Конкретные реализации main loop'ов мне мало интересны, хотелось бы иметь легко адаптируемый под конкретную задачу подход.
хотелось бы услышать какие-нибудь (желательно ценные :) ) идеи по такому интерфейсу
ЗЫ повторю: замечания вроде "вот ссылка на проект N c планировщиком M" мне не интересны, интересны идеи (или ссылки на них) интерфейса, в который, например, легко интегрируется любой планировщик или интерфейс ввода-вывода.
ЗЗЫ идеи "жирных" интерфейсов (под каждый конкретный случай своя реализация) идут лесом, нужен конструктор.