powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Межпроцессное взаимодействие - что быстрее?
25 сообщений из 109, страница 1 из 5
Межпроцессное взаимодействие - что быстрее?
    #39623227
13th
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Какой самый быстрый способ межпроцессного взаимодействия в Windows? Надо передавать много (300..500) небольших сообщений из одного процесса в 3-5 других.
Интересует минимальная задержка и минимальная нагрузка на процессор.
Сейчас использую COM - предел производительности достигнут. Нужно что-то, что побыстрее.
...
Рейтинг: 0 / 0
Межпроцессное взаимодействие - что быстрее?
    #39623234
Фотография NekZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Межпроцессное взаимодействие - что быстрее?
    #39623235
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
13th, если небольших сообщений, то можно попробовать Mailslots , а в общем случае - у memory-mapped файлов конкурентов нет.
...
Рейтинг: 0 / 0
Межпроцессное взаимодействие - что быстрее?
    #39623236
13th
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
NekZ13th,

Named Pipes

Как и с чем сравнивал?
...
Рейтинг: 0 / 0
Межпроцессное взаимодействие - что быстрее?
    #39623237
13th
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rdb_dev13th, если небольших сообщений, то можно попробовать Mailslots , а в общем случае - у memory-mapped файлов конкурентов нет.
Сообщения от 20 до 50 байт.
А как в случае файлов происходит уведомление об изменении? Там какой-то callback или через Wait-функцию?
...
Рейтинг: 0 / 0
Межпроцессное взаимодействие - что быстрее?
    #39623244
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
13thА как в случае файлов происходит уведомление об изменении?

Любым способом на который хватит больной фантазии. От "вообще никак" и критических секций
до отмашки флажками.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Межпроцессное взаимодействие - что быстрее?
    #39623297
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
13thКакой самый быстрый способ межпроцессного взаимодействия в Windows? Надо передавать много (300..500) небольших сообщений из одного процесса в 3-5 других.
Интересует минимальная задержка и минимальная нагрузка на процессор.
Сейчас использую COM - предел производительности достигнут. Нужно что-то, что побыстрее.
Lock-free очередь через memory-mapped файл
...
Рейтинг: 0 / 0
Межпроцессное взаимодействие - что быстрее?
    #39623393
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyLock-free очередь через memory-mapped файл

Поток сообщений у него, пожалуй, маловат для lock-free. Процессор будет зря грузиться.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Межпроцессное взаимодействие - что быстрее?
    #39623453
13th
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прошу прощенья, не совсем точно написал.
Надо передавать 300..500 сообщений В СЕКУНДУ.
...
Рейтинг: 0 / 0
Межпроцессное взаимодействие - что быстрее?
    #39623488
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
13thНадо передавать 300..500 сообщений В СЕКУНДУ.

500 небольших сообщений по килобайту это полмегабайта в секунду. На этом вообще затыка
быть не может: TCP со всем его оверхэдом способно гнать мегабайты в секунду и ещё поспать
по ходу.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Межпроцессное взаимодействие - что быстрее?
    #39623516
13th
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov, 500 сообщений - это не не пол-мегабайта. 500 сообщений в 5 клиентов - это 3000 переключений контекстов процесса в секунду.
Я давно тебя просил не появляться в моих темах: у тебя поверхностный взгляд и неуместный апломб.
...
Рейтинг: 0 / 0
Межпроцессное взаимодействие - что быстрее?
    #39623518
13th
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anatoly Moskovsky, для lock-free нужен общий менеджер памяти. Для, для межпотокового взаимодействия - самое оно. Но есть реализации для межпроцесного взаимодействия? Я не в курсе этой темы, кинь, пожалуйста, пару ссылок, с чем работал ты.
...
Рейтинг: 0 / 0
Межпроцессное взаимодействие - что быстрее?
    #39623521
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
13thDimitry Sibiryakov, 500 сообщений - это не не пол-мегабайта. 500 сообщений в 5 клиентов - это 3000 переключений контекстов процесса в секунду.
Я давно тебя просил не появляться в моих темах: у тебя поверхностный взгляд и неуместный апломб.
И что? 500,5,3000... для IP, а тем более loopback раз плюнуть

У меня на Descktop (1 проц, 2 ядра. 4 HT ядра) под 40-50 Mb/s в 200 байтных пакетах без проблем получалось. С натяжкой > 100 Mb/s. Т.е. пара сотен тысяч IP пакетов через loopback.

Общую память и lock free очереди используют когда надо под сотню миллионов сообщений в секунду передать. AFAIK

IP через Loopback в Windows давно оптимизировано для inter process communication. По реальному Etnernet (даже 10G) скорость будет существенно меньше.
...
Рейтинг: 0 / 0
Межпроцессное взаимодействие - что быстрее?
    #39623527
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
13thдля lock-free нужен общий менеджер памяти

MMF это и есть shared memory.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Межпроцессное взаимодействие - что быстрее?
    #39623538
13th
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid Kudryavtsev, а какая задержка на пакете получается?
Мне надо сделать, что бы работало как COM сейчас: сервер - подписчики, событие - отправил пакет - обработался в процессах А, Б, В, на каждое событие.
Если скорость достигается за счёт группировки, т.е. за счёт того, что call-back вызов дёргается один раз на несколько событий - тогда не годится.
...
Рейтинг: 0 / 0
Межпроцессное взаимодействие - что быстрее?
    #39623548
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
13th500 сообщений - это не не пол-мегабайта. 500 сообщений в 5 клиентов - это 3000 переключений контекстов процесса в секунду.
Вообще если вы возьмете любой способ синхронизации, то спокойно сотни тысяч сообщений в секунду можно получить. Ради этих 500/s нет смысла морочиться с локфри.
Dimitry SibiryakovПоток сообщений у него, пожалуй, маловат для lock-free. Процессор будет зря грузиться.
Наверно да.
13thля lock-free нужен общий менеджер памяти.
Чаще всего не нужен. Обычно можно сообщения упаковывать в один непрерывный кусок памяти и просто скопировать его в очередь при отправке, а на принимающей стороне распаковать.
Сама очередь - это простой закольцованный буфер с двумя указателями - места чтения и записи.
...
Рейтинг: 0 / 0
Межпроцессное взаимодействие - что быстрее?
    #39623553
13th
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anatoly MoskovskyВообще если вы возьмете любой способ синхронизации, то спокойно сотни тысяч сообщений в секунду можно получить. Ради этих 500/s
Ну вот, взял такой:
Сделал memory-mapped файл, пишу в него, делаю Set эвенту, в клиенте читаю. Размер структуры - тривиальный, 8 байт.
Получается 20 тысяч в секунду. Процессор i5-4440. До сотен тысяч далеко.

код сервера:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
	for (size_t i = 0; i < uCount; i++)
	{
		data.nNumber = (int)i;
		CopyMemory((PVOID)pBuf, &data, sizeof(SData));
		
		evWrite.Set();
		evRead.WaitOne();
		evRead.Reset();
	}



код клиента:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
		do
		{
			evWrite.WaitOne();
			CopyMemory(&data, (PVOID)pBuf, sizeof(SData));
			evWrite.Reset();
			evRead.Set();
		} while (data.cmd != ECommand::eQuit);
...
Рейтинг: 0 / 0
Межпроцессное взаимодействие - что быстрее?
    #39623569
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
13thДо сотен тысяч далеко.

Потому что у тебя очередь из одного элемента и процесс не распараллеливается от слова
"вообще". При таком подходе нет смысла разносить код в разные приложения или потоки: он
выполняется строго последовательно.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Межпроцессное взаимодействие - что быстрее?
    #39623605
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
13thНу вот, взял такой:
Сделал memory-mapped файл, пишу в него, делаю Set эвенту, в клиенте читаю. Размер структуры - тривиальный, 8 байт.
Получается 20 тысяч в секунду. Процессор i5-4440. До сотен тысяч далеко.
Как выше уже написали здесь проблема в том что нет очереди.
Как только появляется очередь, то сигналы можно слать уже не на каждое сообщение, а только если очередь пуста/полна (а тогда и так одна из сторон простаивает и скорость сигналов не важна). А в промежутках между этим применяется обычный мьютекс.
Я в такой конфигурации получал не то что сотни тысяч - а даже миллионы в сек.
...
Рейтинг: 0 / 0
Межпроцессное взаимодействие - что быстрее?
    #39623612
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky,

здесь проблема в

авторМне надо сделать, что бы работало как COM сейчас: сервер - подписчики, событие - отправил пакет - обработался в процессах А, Б, В, на каждое событие.
Если скорость достигается за счёт группировки, т.е. за счёт того, что call-back вызов дёргается один раз на несколько событий - тогда не годится.как только требуется ждать ответа - приходит беленький пушистый зверёк.

Ему придётся весь код в асинхронный переделывать
...
Рейтинг: 0 / 0
Межпроцессное взаимодействие - что быстрее?
    #39623629
Фотография Малыхин Сергей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как же разделяемая память? https://www.google.ru/search?q=shared memory&oq=shared &aqs=chrome.2.69i57j0l5.10823j0j7&sourceid=chrome&ie=UTF-8
Что то быстрее сложно придумать =)
...
Рейтинг: 0 / 0
Межпроцессное взаимодействие - что быстрее?
    #39623644
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИМХО в пределах одной машины можно по UDP слать. При такой маленькой нагрузке потерь не должно быть.

Поизучай ZeroMQ - это легковесная очередь сообщений с различными стратегиями рассылки сообщений.
В форуме по дельфям ее подробно обсуждали .
...
Рейтинг: 0 / 0
Межпроцессное взаимодействие - что быстрее?
    #39623686
13th
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ближайшая аналогия: поток котировок. Ты должен доставить котировку в несколько модулей. Один модуль считает стратегию. Второй - баланс. Третий - отчёт. Поток котировок, естественно, идёт из одного потока. Задержка в 1..1,5ms терпима. Но пересылать группами по 100 штук - уже без варика. Так же нельзя менять порядок котировок - по понятным причинам.

Anatoly MoskovskyКак выше уже написали здесь проблема в том что нет очереди.
Как только появляется очередь, то сигналы можно слать уже не на каждое сообщение, а только если очередь пуста/полна (а тогда и так одна из сторон простаивает и скорость сигналов не важна). А в промежутках между этим применяется обычный мьютекс.

Должно обрабатываться КАЖДОЕ сообщение. Никакой очереди быть не может. Если бы можно было бы группировать, я бы всё отправил один раз в секунду, и это заняло бы 10ms.
Каждое сообщение должно обрабатываться В СВОЮ ОЧЕРЕДЬ. Поэтому никакого распараллеливания отправки тоже быть не может. Клиенты и так работают параллельно.

Anatoly MoskovskyЯ в такой конфигурации получал не то что сотни тысяч - а даже миллионы в сек.
Можешь кусок кода показать?
...
Рейтинг: 0 / 0
Межпроцессное взаимодействие - что быстрее?
    #39623687
13th
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid KudryavtsevИ что? 500,5,3000... для IP, а тем более loopback раз плюнуть

У меня на Descktop (1 проц, 2 ядра. 4 HT ядра) под 40-50 Mb/s в 200 байтных пакетах без проблем получалось. С натяжкой > 100 Mb/s. Т.е. пара сотен тысяч IP пакетов через loopback.

Ты имеешь ввиду обычный Winsock?
...
Рейтинг: 0 / 0
Межпроцессное взаимодействие - что быстрее?
    #39623688
13th
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Малыхин СергейА как же разделяемая память? https://www.google.ru/search?q=shared memory&oq=shared &aqs=chrome.2.69i57j0l5.10823j0j7&sourceid=chrome&ie=UTF-8
Что то быстрее сложно придумать =)
Тему прочти
...
Рейтинг: 0 / 0
25 сообщений из 109, страница 1 из 5
Форумы / C++ [игнор отключен] [закрыт для гостей] / Межпроцессное взаимодействие - что быстрее?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]