|
20 / 19 / 9
Регистрация: 06.02.2015
Сообщений: 382
|
|
.NET 4.x Межпроцессорный сигналинг29.02.2016, 03:41. Показов 732. Ответов 8
Метки нет (Все метки)
я передаю данные через МемориМаппедФайл*MMF (между 2я процессами), один процесс пишет, другой читает.
Если запустить параллельно, без доп защиты - происходит эффект "затирания" если считка и записи попадут в один и тот же момент. Сейчас у меня транслируется: 1й байт - бул (флаг, идёт ли запись) (некст)4 байта - длинна объекта(длинна массива) (некйс)массив байт (объект) С флагом в первом байте работает не "ах ти", тот же эффект затирания всё равно проявляется + подтормаживает. Приложение "писатель", пишет из множества потоков в свои MMF объекты. Хотел было юзать Mutex для не вышло... т.к. его можно вызывать только из синхронизированного блока кода, а как я выше написал, у меня асинх. код. Нужно какой-то вариант межпроцессорного сигналинга, да бы остановить считку в момент записи (но как можно на более короткое время). Какие варианты решения??
0
|
|
| 29.02.2016, 03:41 | |
|
Ответы с готовыми решениями:
8
Межпроцессорный мьютекс linux Fatal error LNK1104. Удаленный, межпроцессорный com объект Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,574
|
|
| 29.02.2016, 04:01 | |
|
Fast shared Array, Buffer and Circular Buffer / Ring Buffer for .NET IPC with Memory Mapped Files пробовали?
1
|
|
|
Ушел с форума
|
||
| 29.02.2016, 12:08 | ||
|
По крайней мере, в Windows. К тому же для TCP нужен отдельный порт, который гарантированно свободен. IMHO, TCP для межпроцессного обмена в рамках одной машины как-то не очень.
0
|
||
|
|
||
| 29.02.2016, 12:35 | ||
|
Касаемо порта - да порт нужен. Но и для файла фиксированное имя тоже нужно, что тоже не очень. Касаемо скорости - я конечно специально не мерял, но не очень понимаю с чего бы оно могло тормозить. Ведь на локалхосте пакеты даже через сетевую карту не идут, только через драйвер сети. То есть весь процесс обмена идет только через память, что не сильно отличается от MMF. Зато есть очевидные плюсы: 1) Готовая инфраструктура сигналинга. Асинхронный сокет выдает событие о приходе данных. Никаких бесконечных циклов проверки, никаких коллизий записи/чтения, никаких "флаг, идёт ли запись". Данные от отправителя напрямую приходят к получателю. 2) Да, свободный порт нужен. На зато мы получаем автоматически запрет на запуск второго экземпляра приложения(которое не запустится, потому что порт будет занят). В случае MMF - что произойдет если будет запущен второй экземпляр "писателя"? 3) Сокеты - это full-duplex. MMF - в общем случае нет (если файл - один). 4) Масштабируемость, о чем я уже писал. В общем, в определенных случаях такой вариант не так уж и плох. Я так делал в некоторых проектах, работало нормально.
0
|
||
|
Ушел с форума
|
||||||||
| 29.02.2016, 13:17 | ||||||||
|
которое имеет все шансы быть достаточно уникальным. А вот найти свободный порт, который гарантированно никем не будет занят - это проблема посложнее. провайдеров, потом переключение в ядро, потом через верх стека TCP/IP (afd.sys/tcpip.sys), там они могут еще фильтроваться антивирусами/фаерволами, иногда в отложенном режиме. В итоге может вылиться в тысячи тактов. А когда обмен идет через MMF, то даже системных вызовов нет, просто чтение и запись в память. Т.е. суммарный перфоманс может различаться на порядки. передачи данных. У MMF нет сигналинга "из коробки". будет записано ERROR_ALREADY_EXISTS. Т.е. можно ограничить запуск второго писателя, если нужно. В MMF можно писать и читать в оба конца одновременно. Другое дело - как это все синхронить и разруливать. вряд ли есть что-то лучше, чем сокеты или пайпы (или RPC поверх них). Просто TCP и сокеты довольно часто советуют для IPC, хотя, на мой взгляд, требование свободного порта и long path - довольно существенные недостатки данного способа, чтобы ими пренебрегать.
1
|
||||||||
|
484 / 397 / 68
Регистрация: 14.02.2014
Сообщений: 1,930
|
|
| 29.02.2016, 13:46 | |
|
Чем не устраивает WCF PIPE? Кажется именно для этих задач пайпы и были придуманы?
0
|
|
|
|
|
| 29.02.2016, 14:20 | |
|
0
|
|
|
1454 / 847 / 150
Регистрация: 06.06.2012
Сообщений: 2,370
|
|
| 29.02.2016, 14:59 | |
|
0
|
|
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования.
Часть библиотеки BedvitCOM
Использованы. . .
|
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога
SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
|