|
Межпроцессное взаимодействие - что быстрее?
|
|||
---|---|---|---|
#18+
Dima TИМХО в пределах одной машины можно по UDP слать. При такой маленькой нагрузке потерь не должно быть. Поизучай ZeroMQ - это легковесная очередь сообщений с различными стратегиями рассылки сообщений. В форуме по дельфям ее подробно обсуждали . или rabbitmq ... |
|||
:
Нравится:
Не нравится:
|
|||
02.04.2018, 21:16 |
|
Межпроцессное взаимодействие - что быстрее?
|
|||
---|---|---|---|
#18+
kealon(Ruslan)если поменяешь модель уведомлений на "оповестить всех сразу", Например использовать IP протокол PGM - Pragmatic General Multicast ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2018, 02:34 |
|
Межпроцессное взаимодействие - что быстрее?
|
|||
---|---|---|---|
#18+
13th2. потребитель данных - приложение, подбирающееся к лимиту USER и GDI объектов. Поэтому часть данных открывается в одном процессе, часть - в другом, часть - в третьем. До 5-7 бывает. Почему много GDI-объектов? В этом приложении есть какой-то графический функционал? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2018, 08:54 |
|
Межпроцессное взаимодействие - что быстрее?
|
|||
---|---|---|---|
#18+
mayton, Вот кстати да, очень внимательно стоит обследовать, сложно представить зачем стоит держать столько временных объектов. Такое количество может дать нехилые тормоза ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2018, 09:16 |
|
Межпроцессное взаимодействие - что быстрее?
|
|||
---|---|---|---|
#18+
mayton, да ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2018, 11:18 |
|
Межпроцессное взаимодействие - что быстрее?
|
|||
---|---|---|---|
#18+
kealon(Ruslan)mayton, Вот кстати да, очень внимательно стоит обследовать, сложно представить зачем стоит держать столько временных объектов. Такое количество может дать нехилые тормоза Уже обследовали, все не нужное убрали. Если приложение может месяц выстоять под AppVerifier-ом, и не упасть, поверь, это что-то да значит. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2018, 11:23 |
|
Межпроцессное взаимодействие - что быстрее?
|
|||
---|---|---|---|
#18+
Изопропилkealon(Ruslan)если поменяешь модель уведомлений на "оповестить всех сразу", Например использовать IP протокол PGM - Pragmatic General Multicast PGM — экспериментальный протокол IETF и ещё не утверждён в качестве стандарта . Хм, не кайф сегодня сделать, а завтра переделывать. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2018, 11:26 |
|
Межпроцессное взаимодействие - что быстрее?
|
|||
---|---|---|---|
#18+
13thmayton, да Без тысяч мелких gdi/user объектов - никак? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2018, 11:26 |
|
Межпроцессное взаимодействие - что быстрее?
|
|||
---|---|---|---|
#18+
13thИзопропилпропущено... Например использовать IP протокол PGM - Pragmatic General Multicast PGM — экспериментальный протокол IETF и ещё не утверждён в качестве стандарта . Хм, не кайф сегодня сделать, а завтра переделывать. Но работает со времен XP ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2018, 11:29 |
|
Межпроцессное взаимодействие - что быстрее?
|
|||
---|---|---|---|
#18+
13thДолжно обрабатываться КАЖДОЕ сообщение. Никакой очереди быть не может. Если бы можно было бы группировать, я бы всё отправил один раз в секунду, и это заняло бы 10ms. Каждое сообщение должно обрабатываться В СВОЮ ОЧЕРЕДЬ. Поэтому никакого распараллеливания отправки тоже быть не может. Клиенты и так работают параллельно.В таком случае, все твои компоненты завязаны на производительности друг друга и, в буквальном смысле, осуществляют синхронную обработку сообщений ожидая, пока самый тормозной компоненты обработает сообщение. Занафига? 13thБлижайшая аналогия: поток котировок. Ты должен доставить котировку в несколько модулей. Один модуль считает стратегию. Второй - баланс. Третий - отчёт. Поток котировок, естественно, идёт из одного потока. Задержка в 1..1,5ms терпима. Но пересылать группами по 100 штук - уже без варика. Так же нельзя менять порядок котировок - по понятным причинам.Пойди от обратного - используй для каждого компоненты свой memory-mapped файл, чтобы данные представляли из себя унифицированную структуру меняющегося в размере кольца сообщений, где есть начало кольца, задающееся диспетчерской программой, его размер и конец кольца - последнее сообщение, прочитанное получателем. Всё это прекрасно будет разруливаться без всякой синхронизации одними лишь командами барьеров памяти. Алгоритм работы кольца сам додумаешь. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2018, 11:55 |
|
Межпроцессное взаимодействие - что быстрее?
|
|||
---|---|---|---|
#18+
Изопропил13thmayton, да Без тысяч мелких gdi/user объектов - никак? Изопропил, mayton, ну кончайте вы с этим детским садом. 300Мб только СППшников, а ещё H, idl, CS, XML, XAML, Java, JScript, HTML и хрен знает ещё чего +150Мб как вы себе представляете реализацию ваших советов? "Пересмотреть архитектуру", "переписать на open gl", "переделать без тысяч GDI-объектов"? Вы чего, никогда программу крупнее блокнота не видели? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2018, 12:18 |
|
Межпроцессное взаимодействие - что быстрее?
|
|||
---|---|---|---|
#18+
rdb_devВ таком случае, все твои компоненты завязаны на производительности друг друга и, в буквальном смысле, осуществляют синхронную обработку сообщений ожидая, пока самый тормозной компоненты обработает сообщение. Занафига? Не совсем так. Есть развязка. Я писал чуть выше: приёмники принимают данные в одном потоке, обрабатывают - в другом. rdb_devПойди от обратного - используй для каждого компоненты свой memory-mapped файл, чтобы данные представляли из себя унифицированную структуру меняющегося в размере кольца сообщений, где есть начало кольца, задающееся диспетчерской программой, его размер и конец кольца - последнее сообщение, прочитанное получателем. Всё это прекрасно будет разруливаться без всякой синхронизации одними лишь командами барьеров памяти. Алгоритм работы кольца сам додумаешь. Подумаю, спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2018, 12:22 |
|
Межпроцессное взаимодействие - что быстрее?
|
|||
---|---|---|---|
#18+
13thВы чего, никогда программу крупнее блокнота не видели? Не-а. Покажи как у тебя на экране умещаются 32к графических объектов. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2018, 12:40 |
|
Межпроцессное взаимодействие - что быстрее?
|
|||
---|---|---|---|
#18+
13thИзопропил, mayton, ну кончайте вы с этим детским садом. 300Мб только СППшников, а ещё H, idl, CS, XML, XAML, Java, JScript, HTML и хрен знает ещё чего +150Мб как вы себе представляете реализацию ваших советов? "Пересмотреть архитектуру", "переписать на open gl", "переделать без тысяч GDI-объектов"? Вы чего, никогда программу крупнее блокнота не видели?ну как бы реально, небольшой рефакторинг просто. Чем больше программа, тем этим проще и выгодннее заниматься. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2018, 13:11 |
|
Межпроцессное взаимодействие - что быстрее?
|
|||
---|---|---|---|
#18+
kealon(Ruslan)ну как бы реально, небольшой рефакторинг просто. Чем больше программа, тем этим проще и выгодннее заниматься. Ну вот, сейчас рефакторю IPC. Понемногу производительностью занимаемся всё время. Но "понемногу" за 5 лет набежало очень хорошо. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2018, 13:53 |
|
Межпроцессное взаимодействие - что быстрее?
|
|||
---|---|---|---|
#18+
13th, статистика по GDI объектам есть? чего так много создаётся ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2018, 15:06 |
|
Межпроцессное взаимодействие - что быстрее?
|
|||
---|---|---|---|
#18+
kealon(Ruslan)13th, статистика по GDI объектам есть? чего так много создаётся Какое это отношение имеет к топику? Статистика есть, уменьшить нельзя. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2018, 16:15 |
|
Межпроцессное взаимодействие - что быстрее?
|
|||
---|---|---|---|
#18+
13thkealon(Ruslan)13th, статистика по GDI объектам есть? чего так много создаётся Какое это отношение имеет к топику? Статистика есть, уменьшить нельзя. Прямое - лишние процессы - лишние переключения контекста ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2018, 16:34 |
|
Межпроцессное взаимодействие - что быстрее?
|
|||
---|---|---|---|
#18+
Anatoly MoskovskyКстати у вас там в вашем примере с двумя Event неэффективно используется синхронизация. Event Винды внутри это по сути mutex + condition var. Получается в вашем коде два мьютекса, тогда как для передачи сообщения и возврата результата нужен только один мьютекс (и две условных переменных). Может поэтому тормозит. Чё-то не могу придумать, как засинхронизировать сервер и N клиентов в других процессах одним мьютексом. На всяк случай: Condition variables are user-mode objects that cannot be shared across processes . Не мог бы набросать хотя бы псевдо-код? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2018, 16:45 |
|
Межпроцессное взаимодействие - что быстрее?
|
|||
---|---|---|---|
#18+
Изопропил13thпропущено... Какое это отношение имеет к топику? Статистика есть, уменьшить нельзя. Прямое - лишние процессы - лишние переключения контекста Я ему про Фому - он мне про Ерёму. Я спрашиваю - как мне ускорить IPC, он мне - уменьши количество процессов. Поверь, всё уже уменьшено и оптимизирована до предела. И число GDI не уменьшить. И USER. Мне нужен быстрый IPC, а не рассказы, как у меня всё неэффективно. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2018, 16:50 |
|
Межпроцессное взаимодействие - что быстрее?
|
|||
---|---|---|---|
#18+
13thПоверь, всё уже уменьшено и оптимизирована до предела. И число GDI не уменьшить. И USER. Мне нужен быстрый IPC, а не рассказы, как у меня всё неэффективно.Не верю! Нет предела совершенству!!! Еще можно написать какой-нибудь драйвер с колбэками, который будет плеваться сообщениями. ;) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2018, 17:04 |
|
Межпроцессное взаимодействие - что быстрее?
|
|||
---|---|---|---|
#18+
13thЧё-то не могу придумать, как засинхронизировать сервер и N клиентов в других процессах одним мьютексом. Ну во-первых на каждую пару источник-приемник - своя очередь и своя синхронизация. Во-вторых не один мьютекс, а мьютекс + условная переменная. 13thНа всяк случай: Condition variables are user-mode objects that cannot be shared across processes . Не мог бы набросать хотя бы псевдо-код? По всей видимости в Винде event это и есть межпроцессная условная переменная. Просто оно сделано слишком универсально и потому тормозит. В linux условная переменная - это легковесный объект, который делает только сигналы, а мьютекс к нему полагается отдельный. Я выше приводил в примере condition из Boost . Но выше говорили что этот код на винде тормозит на порядок по сравнению с линуксом. По идее на основе спинлока и семафора можно реализовать что-то на подобие линуксового condition var. Но это надо думать )) А вообще, там выше приводили пример ZeroMQ. Это библиотека как раз умеет быстро посылать сообщения между процессами. Попробуйте ее, или посмотрите как она это делает. Хотя не исключено что под Виндой и она тормозит ))) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2018, 18:27 |
|
Межпроцессное взаимодействие - что быстрее?
|
|||
---|---|---|---|
#18+
Я, вообще-то чутка подшаманил, и разогнал до 242К/сек. (1 клиент) и 143К/сек. (5 клиентов). На стандартных виндовых Event-ах. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2018, 19:09 |
|
Межпроцессное взаимодействие - что быстрее?
|
|||
---|---|---|---|
#18+
13thНа стандартных виндовых Event-ах. Критические сессии намного быстрее, но их можно только внутри одного процесса использовать. Есть еще std::mutex, быстрая штука, но его не сравнивал с эвентами и из разных процессов не пробовал. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2018, 19:31 |
|
|
start [/forum/topic.php?fid=57&msg=39624679&tid=2017690]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
33ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
others: | 252ms |
total: | 379ms |
0 / 0 |