Как стать автором
Обновить

О производительности именованных каналов в многопроцессных приложениях

Время на прочтение4 мин
Количество просмотров7.2K
Всего голосов 22: ↑20 и ↓2+18
Комментарии7

Комментарии 7

А в каком формате гоняются данные по именованным каналам? Если свой формат сообщений, то их ещё надо расспарсить. Если сырые данные — то всё равно надо разделять пакеты данных друг от друга, плюс накладные расходы на прочитать из канала и записать себе в процесс.
Скорость в несколько ГБ в секунду вы получите только если будете писать потоком в одну сторону и правильно подберете размер буфера (порядка 16К за раз). При обмене сообщениями размером ~100Б получите скорость на порядок меньше. Для десктопных приложений, и VS возможно это не критично, но вы все равно получите колоссальный оверхед по сравнению с прямым доступом в память. Любая запись в пайп это тяжеловесный системный вызов, поэтому переживать по поводу мьютексов действительно не стоит (но не потому что они такие быстрые). Так что не вводите людей в заблуждение. А VS мог бы и через файлы на ssd с таким же успехом обмениваться без особых «тормозов»

Лучше бы написали, ради чего это делается скорее всего. Вот это действительно интересная тема, почему-то, до сих пор не освещённая на хабре.

Интересная статья, только я бы не стал переводить на русский устоявшийся термин Named Pipes.
Множество раз видел переведенный термин, в т.ч. в книгах Рихтера, Соломона и Руссиновича.
Я гонял через pipe между двух процессов несжатое full-hd видео. Все было ok, но меня напрягали огромные цифры в колонке I/O в process hacker-е. Немного переделал. Один процесс создает именованный memory mapped файл и отдает его имя через pipe. Так получилось даже быстрее, т.к. я подготавливал все данные в этом файле и весь блок (разжатый full-hd кадр) без копирования как есть отправлялся в другой процесс.
хочу отметить, что максимальная скорость передачи между процессами может быть больше скорости оперативной памяти. всё дело в том, что на самом деле копировать данные нет необходимости, достаточно передать только указатель.Но из-за безопасности в лоб так сделать нельзя, только через разделяемую память. К сожалению у меня всё руки не доходят выложить свою библиотеки высокоскоростной передачи данных между процессами(скорость равна размер блока данных/(скорость вызова 2 мютексов и 1 события)).
Зарегистрируйтесь на Хабре, чтобы оставить комментарий