powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Общение между приложениями на одном компьютере
25 сообщений из 66, страница 2 из 3
Общение между приложениями на одном компьютере
    #39593121
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)чччДпропущено...

Какое переключение, как именно "ускорять"?времени нет искать, вкратце

Проблема в следующем - пока процесс не переключится, естественно не будет отработан приём...

У нас снова кооперативная многозадачность? :)

PS: по ссылке читать пытался, но недолго.
...
Рейтинг: 0 / 0
Общение между приложениями на одном компьютере
    #39593144
Leo Pevzner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как бы все давным давно разжевано....
https://msdn.microsoft.com/ru-ru/library/windows/desktop/aa365574(v=vs.85).aspx
...
Рейтинг: 0 / 0
Общение между приложениями на одном компьютере
    #39593199
Василий №2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Общая память для интенсивного обмена слабо подходит. Сразу появляются задачи синхронизации и прочего геморроя. Пайпы хороши тем, что идентифицируются текстом, а значит, можно зафиксировать название (чего не получится в случае TCP - какой порт ни выбери, есть шанс, что он занят). Зато TCP отлично масштабируется
...
Рейтинг: 0 / 0
Общение между приложениями на одном компьютере
    #39593207
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий №2Общая память для интенсивного обмена слабо подходит. Сразу появляются задачи синхронизации и прочего геморроя.
Зависит от. Прелесть общей памяти в том, что синхроинформацию можно передавать вместе с данными и таким образом избавиться от использования "тяжёлых" средств межпроцессной синхронизации.
...
Рейтинг: 0 / 0
Общение между приложениями на одном компьютере
    #39593235
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий №2Общая память для интенсивного обмена слабо подходит. Сразу появляются задачи синхронизации и прочего геморроя. Пайпы хороши тем, что идентифицируются текстом, а значит, можно зафиксировать название (чего не получится в случае TCP - какой порт ни выбери, есть шанс, что он занят). Зато TCP отлично масштабируетсяэто просто более низкоуровневый механизм и соответственно он требует более высокой квалификации
...
Рейтинг: 0 / 0
Общение между приложениями на одном компьютере
    #39593244
AWSVladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)пока процесс не переключится
Сейчас же многоядерки.
Процесс начинает обрабатывать сразу как пришел эвент
...
Рейтинг: 0 / 0
Общение между приложениями на одном компьютере
    #39593250
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччДУ нас снова кооперативная многозадачность? :)

PS: по ссылке читать пытался, но недолго.фактически да, всё самое быстрое только так
...
Рейтинг: 0 / 0
Общение между приложениями на одном компьютере
    #39593251
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AWSVladimirkealon(Ruslan)пока процесс не переключится
Сейчас же многоядерки.
Процесс начинает обрабатывать сразу как пришел эвентдержи карман шире
...
Рейтинг: 0 / 0
Общение между приложениями на одном компьютере
    #39593787
Василий №2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
softwarerЗависит от. Прелесть общей памяти в том, что синхроинформацию можно передавать вместе с данными и таким образом избавиться от использования "тяжёлых" средств межпроцессной синхронизации.
Может быть. Но натянуть сову модели потока сообщений на глобус общего куска памяти, имхо, тот еще костыль. Если требуемое взаимодействие применимо на общем куске памяти, то конечно, этот вариант будет удобнее всего.
...
Рейтинг: 0 / 0
Общение между приложениями на одном компьютере
    #39593814
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий №2Но натянуть сову модели потока сообщений на глобус общего куска памяти, имхо, тот еще костыль.
Да не сказал бы. Скажем, сходу: кусок памяти делится на две части, сообщения в одну сторону и сообщения в другую. Писатель пишет в свои исходящие по принципу кольцевого буфера, останавливаясь при заполнении. Читатель посылает сообщения о прочитанных кусках, тем самым давая писателю работать дальше.
...
Рейтинг: 0 / 0
Общение между приложениями на одном компьютере
    #39593827
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer,
Как-то не наблюдаю ни одного преимущества такой схемы по сравнению с пайпами.
Разве что когда требуется обмен очень большими данными.
...
Рейтинг: 0 / 0
Общение между приложениями на одном компьютере
    #39593830
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский Борис,

я в данном случае отвечаю конкретно Василию - что натянуть нетрудно. Что касается преимуществ - не изучал серьёзно этот вопрос, не было причин. В целом, доведись мне делать что-то подобное, я отделил бы логику от физики, то есть сделал бы внешний интерфейс с моделью обмена данных и подключаемые протоколы, в которых можно было бы повыбирать и поисследовать. В том числе, допустим, tcp по сети и pipes на локале (или как угодно иначе, что покажет лучшие показатели).
...
Рейтинг: 0 / 0
Общение между приложениями на одном компьютере
    #39593839
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Named Pipes дают примерно такую же скорость, что и tcp. В рамках одной машины.

Как-то тестировал, и по tcp как бы и быстрее получалось. С учетом, что "чистые" WinSock я тогда не использовал, а только надстройку в виде ZMQ - tcp совсем хорошо себя показал.

Хотя, конечно, мог где-то накосячить при сравнении. :)

Но, опять-таки:
Василий №2...Пайпы хороши тем, что идентифицируются текстом, а значит, можно зафиксировать название (чего не получится в случае TCP - какой порт ни выбери, есть шанс, что он занят... - т.е., для tcp приходится приложить чуть больше усилий, чтобы протестировать и выбрать для обмена свободный порт.
...
Рейтинг: 0 / 0
Общение между приложениями на одном компьютере
    #39593843
vavan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerдоведись мне делать что-то подобное, я отделил бы логику от физики, то есть сделал бы внешний интерфейс с моделью обмена данных и подключаемые протоколы, в которых можно было бы повыбирать и поисследовать. В том числе, допустим, tcp по сети и pipes на локалеmsgconnect например так и сделан. указываешь какой канал снизу использовать, mmf или еще что а потом просто шлешь/получаешь сообщения
...
Рейтинг: 0 / 0
Общение между приложениями на одном компьютере
    #39593849
antox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRockantoxX11,

А реализация через Indy ?Зачем этого монстра тянуть? Проще разобраться с апи, там пяток функций, чем пытаться заставить хоть как-то работать эту поделку.

А есть примеры на delphi ?
...
Рейтинг: 0 / 0
Общение между приложениями на одном компьютере
    #39593856
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Общение между приложениями на одном компьютере
    #39593858
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
antox,

и вот тут . Но не на Дельфи. :)
...
Рейтинг: 0 / 0
Общение между приложениями на одном компьютере
    #39593914
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччДNamed Pipes дают примерно такую же скорость, что и tcp. В рамках одной машины.

Как-то тестировал, и по tcp как бы и быстрее получалось. С учетом, что "чистые" WinSock я тогда не использовал, а только надстройку в виде ZMQ - tcp совсем хорошо себя показал.

Хотя, конечно, мог где-то накосячить при сравнении. :)

Скорее всего.
Я проверял работу пайпов в качестве прокладки между софтом и железом. По сравнению с прямым взаимодействием скорость падала меньше чем на 1%, при том, что софт грузил все процессоры на 90+.

Различия с tcp будут проявляться тогда, когда размер транзакции существенно превышает размер пакета.
...
Рейтинг: 0 / 0
Общение между приложениями на одном компьютере
    #39594475
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччД...
Сейчас накидал простой тест, "zmq над tcp:"
При обмене блоками диной 1 байт - скорость 13 кбайт в секунду, увеличение длины пакета данных до килобайта-двух почти не влияет на время.
Получается примерно 6500 синхронных сеансов обмена в секунду, 0,15 миллисекунды на сеанс. Т.е., время получения ответа после короткого запроса - полторы миллисекунды.

...и чуть больше 100 мегабитМЕГАБАЙТ /сек при пересылка блоков по 16кБайт к серверу и обратно, последовательно (клиент отправил - ждет ответа, сервер получил - отправил ответ), тут уже время передачи самих данных играет роль.

Время первоначального коннекта не учитывалось (тоже, в общем, не особо и велико).
...
Рейтинг: 0 / 0
Общение между приложениями на одном компьютере
    #39594657
Василий №2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
softwarerВасилий №2Но натянуть сову модели потока сообщений на глобус общего куска памяти, имхо, тот еще костыль.
Да не сказал бы. Скажем, сходу: кусок памяти делится на две части, сообщения в одну сторону и сообщения в другую. Писатель пишет в свои исходящие по принципу кольцевого буфера, останавливаясь при заполнении. Читатель посылает сообщения о прочитанных кусках, тем самым давая писателю работать дальше.
Окей. Сходу:
1. "посылает сообщения о прочитанных кусках" - т.е. сообщения надо как-то идентифицировать. А это счетчик, слежение за инкрементом, предусмотреть овефлоу и т.д. Либо писатель останавливается до тех пор, пока читатель не вычерпает всю очередь, что дает задержки. Либо читателю придется считывать разом, перегонять в очередь внутри себя и ее уже разбирать. Писатель же должен постоянно проверять статус прочитанности, а это таймер.
2. Не забыть про интерлокед функции записи флагов состояния в общую память. Причем это касается как писателя - отметить, что сообщение полностью записано, и его можно читать, так и читателя - послать отметку о прочтении.
3. Пакеты с нефиксированной длиной также добавят жары.

В общем, обработав все подводные камни, уже можно обнаружить, что написал половину стека TCP вкупе с транзакционной моделью. Не говорю, что это невозможно, но и не так просто, как кажется на первый взгляд.
...
Рейтинг: 0 / 0
Общение между приложениями на одном компьютере
    #39594700
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий №2Окей. Сходу:
Сходу - по ответу возникает ощущение, что Вы успели забыть, что такое кольцевой буфер.

Василий №21. "посылает сообщения о прочитанных кусках" - т.е. сообщения надо как-то идентифицировать.
Нисколько. Идентифицировать надо куски - то есть достаточно смещения. В принципе и сообщения-то посылать не обязательно, достаточно доверить читателю сдвигать указатель начала. Но на глаз, думаю, с сообщениями получится лучше, если задуматься о функционале в совокупности.

Василий №2Писатель же должен постоянно проверять статус прочитанности, а это таймер.
Неверно. "Статус прочитанности" приходит в обратных сообщениях, без всякого таймера.

Василий №22. Не забыть про интерлокед функции записи флагов состояния в общую память. Причем это касается как писателя - отметить, что сообщение полностью записано, и его можно читать, так и читателя - послать отметку о прочтении.
Cнова неверно. Ими нужно защитить только изменение указателей на начало-конец буфера.

Василий №23. Пакеты с нефиксированной длиной также добавят жары.
Вообще бред. Прочитайте уже наконец, что такое кольцевой буфер. Единственный неприятный случай - пакеты длиной больше выделенного куска памяти. Но в наш век трудно считать это серьёзным аргументом.

Василий №2В общем, обработав все подводные камни, уже можно обнаружить, что написал половину стека TCP
А если прочитать, что такое стек TCP, обнаружится, что до его половины ещё сто раз по столько ненужных ужасов.
...
Рейтинг: 0 / 0
Общение между приложениями на одном компьютере
    #39594903
Василий №2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
softwarerСходу - по ответу возникает ощущение, что Вы успели забыть, что такое кольцевой буфер.
Ощущение ложное. Пожалуй, я сразу наложил более близкую мне модель организации на описанный механизм, отчего возникло недопонимание. Однако у тебя тоже проблемы с выражением мыслей.
авторНисколько. Идентифицировать надо куски - то есть достаточно смещения. В принципе и сообщения-то посылать не обязательно, достаточно доверить читателю сдвигать указатель начала. Но на глаз, думаю, с сообщениями получится лучше, если задуматься о функционале в совокупности.
Под "сообщением" в исходном 21153724 очевидно подразумеваются записи в области читатель=>писатель.
авторНеверно. "Статус прочитанности" приходит в обратных сообщениях, без всякого таймера.
Противоречие с вышеозначенным понятием "сообщения". Если под "сообщением" вдруг начало пониматься что-то другое - то надо учиться выражать свои мысли. Если же имеются в виду оконные сообщения, то такой способ обмена становится полной ерундой, не стоящей обсуждения.

Для безопасной организации обмена потребуются два семафора и, скорее всего, по одному треду в каждом приложении, который бы занимался общением с разделяемой памятью.
...
Рейтинг: 0 / 0
Общение между приложениями на одном компьютере
    #39595000
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
antoxпередачу данных между приложениями, работающими на одном компьютере?

гуглить библиотеку Cromis.IPC
...
Рейтинг: 0 / 0
Общение между приложениями на одном компьютере
    #39595112
kep-ko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Василий №2, для безопасной организации обмена через общую память потребуется один или два "кольцевых" массива записей с дополнительным булевым полем для каждого элемента. Писатель устанавливает это поле (байт) в не ноль (что есть атомарно на аппаратном уровне), а читатель после прочтения - в ноль. Усё. Семафор не нужен
...
Рейтинг: 0 / 0
Общение между приложениями на одном компьютере
    #39595168
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kep-koУсё. Семафор не нужен

тогда будут нужны бесконечные циклы

Код: pascal
1.
 while not NextQueueFrame^.DataReady do Sleep(0);



это называется spinlock и при очень активном обмене это действительно лучше семафоров

но только при очень активном
...
Рейтинг: 0 / 0
25 сообщений из 66, страница 2 из 3
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Общение между приложениями на одном компьютере
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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