Нужен совет. Пишу приложение, которое должно рассылать некоторую информацию (30байт) внутри одного компа нескольлким приложениям (~20). Есть очень жесткие требования к производительности. Процесс передачи не должен занимать больше 5-10 микросекунд.
Сейчас пробую смотреть на Shared Memory в качестве сторейджа для данных. Остановился на том, что не могу найти объект ядра, который бы позволил клиентам спать до наступления изменений в сторейдже и не просыпаться, до тех пор пока не придут новые для него новые данные. Тоесть нужно чтото типа такого:
// On client side
WaitUntilEqual( kernel_object, someVal );
// On server side
Update( kernel_object, new_value );
Если делать это в user-mode, то тогда сильно грузится проц. Пробовал играться с существующими объектами ядра:
— ManualResetEvent не подходит потому, что клиент может начать обрабатывать данные по второму кругу и еще нужно както думать, когда его выключать.
— С AutoResetEvent обратная фигня — клиент после просыпания должен высталвять этот евент в сигнальное состояние, если есть еще слушающие другие клиента. И потом latency последнего клиента будет сумарным от latency всех предыдущих.
— Семафор тоже не получается применить.
Сейчас буду играться с мультикастом на локале. ИМХО это будет как с пушки по воробьям. Может есть чтоот еще более легковесное?