|
|
|
Общение между приложениями на одном компьютере
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)чччДпропущено... Какое переключение, как именно "ускорять"?времени нет искать, вкратце Проблема в следующем - пока процесс не переключится, естественно не будет отработан приём... У нас снова кооперативная многозадачность? :) PS: по ссылке читать пытался, но недолго. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2018, 09:41 |
|
||
|
Общение между приложениями на одном компьютере
|
|||
|---|---|---|---|
|
#18+
Как бы все давным давно разжевано.... https://msdn.microsoft.com/ru-ru/library/windows/desktop/aa365574(v=vs.85).aspx ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2018, 10:36 |
|
||
|
Общение между приложениями на одном компьютере
|
|||
|---|---|---|---|
|
#18+
Общая память для интенсивного обмена слабо подходит. Сразу появляются задачи синхронизации и прочего геморроя. Пайпы хороши тем, что идентифицируются текстом, а значит, можно зафиксировать название (чего не получится в случае TCP - какой порт ни выбери, есть шанс, что он занят). Зато TCP отлично масштабируется ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2018, 11:30 |
|
||
|
Общение между приложениями на одном компьютере
|
|||
|---|---|---|---|
|
#18+
Василий №2Общая память для интенсивного обмена слабо подходит. Сразу появляются задачи синхронизации и прочего геморроя. Зависит от. Прелесть общей памяти в том, что синхроинформацию можно передавать вместе с данными и таким образом избавиться от использования "тяжёлых" средств межпроцессной синхронизации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2018, 11:35 |
|
||
|
Общение между приложениями на одном компьютере
|
|||
|---|---|---|---|
|
#18+
Василий №2Общая память для интенсивного обмена слабо подходит. Сразу появляются задачи синхронизации и прочего геморроя. Пайпы хороши тем, что идентифицируются текстом, а значит, можно зафиксировать название (чего не получится в случае TCP - какой порт ни выбери, есть шанс, что он занят). Зато TCP отлично масштабируетсяэто просто более низкоуровневый механизм и соответственно он требует более высокой квалификации ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2018, 12:04 |
|
||
|
Общение между приложениями на одном компьютере
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)пока процесс не переключится Сейчас же многоядерки. Процесс начинает обрабатывать сразу как пришел эвент ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2018, 12:11 |
|
||
|
Общение между приложениями на одном компьютере
|
|||
|---|---|---|---|
|
#18+
чччДУ нас снова кооперативная многозадачность? :) PS: по ссылке читать пытался, но недолго.фактически да, всё самое быстрое только так ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2018, 12:20 |
|
||
|
Общение между приложениями на одном компьютере
|
|||
|---|---|---|---|
|
#18+
AWSVladimirkealon(Ruslan)пока процесс не переключится Сейчас же многоядерки. Процесс начинает обрабатывать сразу как пришел эвентдержи карман шире ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2018, 12:20 |
|
||
|
Общение между приложениями на одном компьютере
|
|||
|---|---|---|---|
|
#18+
softwarerЗависит от. Прелесть общей памяти в том, что синхроинформацию можно передавать вместе с данными и таким образом избавиться от использования "тяжёлых" средств межпроцессной синхронизации. Может быть. Но натянуть сову модели потока сообщений на глобус общего куска памяти, имхо, тот еще костыль. Если требуемое взаимодействие применимо на общем куске памяти, то конечно, этот вариант будет удобнее всего. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2018, 11:19 |
|
||
|
Общение между приложениями на одном компьютере
|
|||
|---|---|---|---|
|
#18+
Василий №2Но натянуть сову модели потока сообщений на глобус общего куска памяти, имхо, тот еще костыль. Да не сказал бы. Скажем, сходу: кусок памяти делится на две части, сообщения в одну сторону и сообщения в другую. Писатель пишет в свои исходящие по принципу кольцевого буфера, останавливаясь при заполнении. Читатель посылает сообщения о прочитанных кусках, тем самым давая писателю работать дальше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2018, 11:49 |
|
||
|
Общение между приложениями на одном компьютере
|
|||
|---|---|---|---|
|
#18+
softwarer, Как-то не наблюдаю ни одного преимущества такой схемы по сравнению с пайпами. Разве что когда требуется обмен очень большими данными. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2018, 12:01 |
|
||
|
Общение между приложениями на одном компьютере
|
|||
|---|---|---|---|
|
#18+
Соколинский Борис, я в данном случае отвечаю конкретно Василию - что натянуть нетрудно. Что касается преимуществ - не изучал серьёзно этот вопрос, не было причин. В целом, доведись мне делать что-то подобное, я отделил бы логику от физики, то есть сделал бы внешний интерфейс с моделью обмена данных и подключаемые протоколы, в которых можно было бы повыбирать и поисследовать. В том числе, допустим, tcp по сети и pipes на локале (или как угодно иначе, что покажет лучшие показатели). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2018, 12:07 |
|
||
|
Общение между приложениями на одном компьютере
|
|||
|---|---|---|---|
|
#18+
Named Pipes дают примерно такую же скорость, что и tcp. В рамках одной машины. Как-то тестировал, и по tcp как бы и быстрее получалось. С учетом, что "чистые" WinSock я тогда не использовал, а только надстройку в виде ZMQ - tcp совсем хорошо себя показал. Хотя, конечно, мог где-то накосячить при сравнении. :) Но, опять-таки: Василий №2...Пайпы хороши тем, что идентифицируются текстом, а значит, можно зафиксировать название (чего не получится в случае TCP - какой порт ни выбери, есть шанс, что он занят... - т.е., для tcp приходится приложить чуть больше усилий, чтобы протестировать и выбрать для обмена свободный порт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2018, 12:21 |
|
||
|
Общение между приложениями на одном компьютере
|
|||
|---|---|---|---|
|
#18+
softwarerдоведись мне делать что-то подобное, я отделил бы логику от физики, то есть сделал бы внешний интерфейс с моделью обмена данных и подключаемые протоколы, в которых можно было бы повыбирать и поисследовать. В том числе, допустим, tcp по сети и pipes на локалеmsgconnect например так и сделан. указываешь какой канал снизу использовать, mmf или еще что а потом просто шлешь/получаешь сообщения ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2018, 12:24 |
|
||
|
Общение между приложениями на одном компьютере
|
|||
|---|---|---|---|
|
#18+
YuRockantoxX11, А реализация через Indy ?Зачем этого монстра тянуть? Проще разобраться с апи, там пяток функций, чем пытаться заставить хоть как-то работать эту поделку. А есть примеры на delphi ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2018, 12:27 |
|
||
|
Общение между приложениями на одном компьютере
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2018, 12:32 |
|
||
|
Общение между приложениями на одном компьютере
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2018, 12:33 |
|
||
|
Общение между приложениями на одном компьютере
|
|||
|---|---|---|---|
|
#18+
чччДNamed Pipes дают примерно такую же скорость, что и tcp. В рамках одной машины. Как-то тестировал, и по tcp как бы и быстрее получалось. С учетом, что "чистые" WinSock я тогда не использовал, а только надстройку в виде ZMQ - tcp совсем хорошо себя показал. Хотя, конечно, мог где-то накосячить при сравнении. :) Скорее всего. Я проверял работу пайпов в качестве прокладки между софтом и железом. По сравнению с прямым взаимодействием скорость падала меньше чем на 1%, при том, что софт грузил все процессоры на 90+. Различия с tcp будут проявляться тогда, когда размер транзакции существенно превышает размер пакета. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2018, 13:34 |
|
||
|
Общение между приложениями на одном компьютере
|
|||
|---|---|---|---|
|
#18+
чччД... Сейчас накидал простой тест, "zmq над tcp:" При обмене блоками диной 1 байт - скорость 13 кбайт в секунду, увеличение длины пакета данных до килобайта-двух почти не влияет на время. Получается примерно 6500 синхронных сеансов обмена в секунду, 0,15 миллисекунды на сеанс. Т.е., время получения ответа после короткого запроса - полторы миллисекунды. ...и чуть больше 100 мегабитМЕГАБАЙТ /сек при пересылка блоков по 16кБайт к серверу и обратно, последовательно (клиент отправил - ждет ответа, сервер получил - отправил ответ), тут уже время передачи самих данных играет роль. Время первоначального коннекта не учитывалось (тоже, в общем, не особо и велико). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2018, 22:31 |
|
||
|
Общение между приложениями на одном компьютере
|
|||
|---|---|---|---|
|
#18+
softwarerВасилий №2Но натянуть сову модели потока сообщений на глобус общего куска памяти, имхо, тот еще костыль. Да не сказал бы. Скажем, сходу: кусок памяти делится на две части, сообщения в одну сторону и сообщения в другую. Писатель пишет в свои исходящие по принципу кольцевого буфера, останавливаясь при заполнении. Читатель посылает сообщения о прочитанных кусках, тем самым давая писателю работать дальше. Окей. Сходу: 1. "посылает сообщения о прочитанных кусках" - т.е. сообщения надо как-то идентифицировать. А это счетчик, слежение за инкрементом, предусмотреть овефлоу и т.д. Либо писатель останавливается до тех пор, пока читатель не вычерпает всю очередь, что дает задержки. Либо читателю придется считывать разом, перегонять в очередь внутри себя и ее уже разбирать. Писатель же должен постоянно проверять статус прочитанности, а это таймер. 2. Не забыть про интерлокед функции записи флагов состояния в общую память. Причем это касается как писателя - отметить, что сообщение полностью записано, и его можно читать, так и читателя - послать отметку о прочтении. 3. Пакеты с нефиксированной длиной также добавят жары. В общем, обработав все подводные камни, уже можно обнаружить, что написал половину стека TCP вкупе с транзакционной моделью. Не говорю, что это невозможно, но и не так просто, как кажется на первый взгляд. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2018, 10:08 |
|
||
|
Общение между приложениями на одном компьютере
|
|||
|---|---|---|---|
|
#18+
Василий №2Окей. Сходу: Сходу - по ответу возникает ощущение, что Вы успели забыть, что такое кольцевой буфер. Василий №21. "посылает сообщения о прочитанных кусках" - т.е. сообщения надо как-то идентифицировать. Нисколько. Идентифицировать надо куски - то есть достаточно смещения. В принципе и сообщения-то посылать не обязательно, достаточно доверить читателю сдвигать указатель начала. Но на глаз, думаю, с сообщениями получится лучше, если задуматься о функционале в совокупности. Василий №2Писатель же должен постоянно проверять статус прочитанности, а это таймер. Неверно. "Статус прочитанности" приходит в обратных сообщениях, без всякого таймера. Василий №22. Не забыть про интерлокед функции записи флагов состояния в общую память. Причем это касается как писателя - отметить, что сообщение полностью записано, и его можно читать, так и читателя - послать отметку о прочтении. Cнова неверно. Ими нужно защитить только изменение указателей на начало-конец буфера. Василий №23. Пакеты с нефиксированной длиной также добавят жары. Вообще бред. Прочитайте уже наконец, что такое кольцевой буфер. Единственный неприятный случай - пакеты длиной больше выделенного куска памяти. Но в наш век трудно считать это серьёзным аргументом. Василий №2В общем, обработав все подводные камни, уже можно обнаружить, что написал половину стека TCP А если прочитать, что такое стек TCP, обнаружится, что до его половины ещё сто раз по столько ненужных ужасов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2018, 10:36 |
|
||
|
Общение между приложениями на одном компьютере
|
|||
|---|---|---|---|
|
#18+
softwarerСходу - по ответу возникает ощущение, что Вы успели забыть, что такое кольцевой буфер. Ощущение ложное. Пожалуй, я сразу наложил более близкую мне модель организации на описанный механизм, отчего возникло недопонимание. Однако у тебя тоже проблемы с выражением мыслей. авторНисколько. Идентифицировать надо куски - то есть достаточно смещения. В принципе и сообщения-то посылать не обязательно, достаточно доверить читателю сдвигать указатель начала. Но на глаз, думаю, с сообщениями получится лучше, если задуматься о функционале в совокупности. Под "сообщением" в исходном 21153724 очевидно подразумеваются записи в области читатель=>писатель. авторНеверно. "Статус прочитанности" приходит в обратных сообщениях, без всякого таймера. Противоречие с вышеозначенным понятием "сообщения". Если под "сообщением" вдруг начало пониматься что-то другое - то надо учиться выражать свои мысли. Если же имеются в виду оконные сообщения, то такой способ обмена становится полной ерундой, не стоящей обсуждения. Для безопасной организации обмена потребуются два семафора и, скорее всего, по одному треду в каждом приложении, который бы занимался общением с разделяемой памятью. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2018, 14:04 |
|
||
|
Общение между приложениями на одном компьютере
|
|||
|---|---|---|---|
|
#18+
antoxпередачу данных между приложениями, работающими на одном компьютере? гуглить библиотеку Cromis.IPC ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2018, 15:31 |
|
||
|
Общение между приложениями на одном компьютере
|
|||
|---|---|---|---|
|
#18+
Василий №2, для безопасной организации обмена через общую память потребуется один или два "кольцевых" массива записей с дополнительным булевым полем для каждого элемента. Писатель устанавливает это поле (байт) в не ноль (что есть атомарно на аппаратном уровне), а читатель после прочтения - в ноль. Усё. Семафор не нужен ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2018, 17:27 |
|
||
|
Общение между приложениями на одном компьютере
|
|||
|---|---|---|---|
|
#18+
kep-koУсё. Семафор не нужен тогда будут нужны бесконечные циклы Код: pascal 1. это называется spinlock и при очень активном обмене это действительно лучше семафоров но только при очень активном ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2018, 18:23 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39593251&tid=2041237]: |
0ms |
get settings: |
11ms |
get forum list: |
16ms |
check forum access: |
7ms |
check topic access: |
7ms |
track hit: |
69ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
77ms |
get tp. blocked users: |
2ms |
| others: | 255ms |
| total: | 457ms |

| 0 / 0 |
