Механизмы IPC в C# - использование и передовые практики

Некоторое время назад я использовал IPC в коде Win32 - критические секции, события и семафоры.

Как сцена в среде .NET? Есть ли какой-нибудь учебник, объясняющий все доступные параметры, когда их использовать и почему?

Что нужно сделать? Если вам нужно синхронизировать доступ к какому-либо внешнему ресурсу, вы можете использовать Mutex для реализации межпроцессной синхронизации.

Oliver Hanappi 22.02.2010 18:41

+1. Слава Богу. Это первый случай вопросов с привкусом "Best Practices", который не помечен как неконструктивный / не по теме [который я когда-либо видел] !!

F.I.V 26.07.2015 13:25
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
55
2
73 579
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Ответ принят как подходящий

Самый последний материал Microsoft в IPC - Фонд связи Windows. На самом деле на нижнем уровне нет ничего нового (tcp, upd, именованные каналы и т. д.). Но WCF значительно упрощает разработку IPC.

Полезный ресурс:

и конечно MSDN в WCF

Привет, видео по первой ссылке мертво!

Autodidact 08.06.2011 21:30

Существует также .NET Remoting, который мне показался довольно крутым, но я думаю, они устарели теперь, когда у них есть WCF.

Сказал ли Microsoft такое на самом деле?

Mark 18.08.2009 18:37

У них есть: «Этот раздел относится к устаревшей технологии, которая сохраняется для обратной совместимости с существующими приложениями и не рекомендуется для новой разработки. Теперь распределенные приложения должны разрабатываться с использованием Windows Communication Foundation (WCF)». от msdn.microsoft.com/en-us/library/kwdt6w2k.aspx

Lucas 19.06.2010 07:01

Я работал с Remoting в течение многих лет. Для небольших приложений (например, передача до 1k небольших объектов) это очень просто и эффективно. Выше этого предела, нет! Это действительно отстой. Вы должны заархивировать данные перед отправкой, и это добавляет дополнительные накладные расходы (использование ЦП). У меня были очень неприятные воспоминания об этой проблеме.

Behzad Sedighzadeh 19.06.2019 23:05

Я обычно использую именованные каналы или сокеты Unix (в зависимости от того, нацелен ли я на MS.NET или Mono - у меня есть класс, который абстрагирует его), поскольку он прост в использовании, переносится и позволяет мне легко взаимодействовать с неуправляемым кодом. . Тем не менее, если вы имеете дело только с управляемым кодом, используйте WCF или удаленное взаимодействие - последнее, если вам нужна поддержка Mono, поскольку их поддержки WCF просто еще нет.

Хотя это могло иметь место в сентябре 2008 года (когда был сделан этот комментарий), сейчас 2011 год, и WCF на Mono сейчас достаточно зрелый. Смотрите Страница разработки Mono WCF и судите сами.

Brent Matzelle 03.06.2011 18:54

Похоже, вас интересуют методы синхронизации, а не общение. Если это так, вы можете запустить здесь или, возможно, еще один краткий обзор.

Помимо очевидного (WCF), существует довольно хорошая привязка ZeroMQ для C# / CLR:

http://www.zeromq.org/bindings:clr

Реализует ориентированные на сообщения IPC, pub / sub и различные другие стратегии с гораздо меньшим количеством кода и конфигурации, чем WCF.

Кроме того, он, по крайней мере, на порядок быстрее, чем что-либо еще, и имеет меньшую задержку, если вам требуется связь с низкой задержкой.

Что касается семафоров, блокировок, мьютексов и т. д. Если вы делитесь посредством общения, а не общаетесь посредством совместного использования, у вас будет меньше хлопот, чем при традиционной парадигме.

«делиться, общаясь, а не общаться, делясь» This should be recited every day by anyone who is doing concurrent programming.
Matt Klein 02.09.2015 23:50

Что это значит?

Believe2014 11.06.2017 06:58

Я понимаю, что это означает, что вместо того, чтобы делиться ресурсами и каждая программа пытается требовать их по своему желанию, вы должны заставить программы напрямую общаться друг с другом с IPC. В первом сценарии ваши программы «общаются», блокируя общий ресурс. Во втором они общаются через какой-то протокол, чтобы координировать использование общего ресурса.

jmathew 27.06.2017 20:55
zguide.zeromq.org/page:all#Unicast-TransportsThe inter-process ipc transport is disconnected, like tcp. It has one limitation: it does not yet work on Windows. Soooo actually not really IPC for windows right? Which still might be quite common when the C# tag was added.
Samuel 28.05.2019 15:29

Вы мог используете адаптер локальной петли с ZeroMQ. Однако производительность, очевидно, будет зависеть от реализации адаптера. Однако мне не нравится семантика обращения к сетевому стеку (хотя и виртуальному интерфейсу), когда вы не намерены общаться по сети. Лично для IPC на той же машине я считаю использование трубок лучшим решением. Реализация .NET Standard надежна и полностью переносима. Решения с отображенной памятью могут предложить лучшую производительность, но использование собственного - сложная задача, а синхронизация подвержена ошибкам. "делиться общением" :)

0b101010 26.06.2020 18:49

Я бы рекомендовал использовать файлы с отображением памяти, если вам нужно использовать домен машины, а не связь через сеть. См. Следующую ссылку.

http://techmikael.blogspot.com/2010/02/blazing-fast-ipc-in-net-4-wcf-vs.html

Список API локальных машин .NET: weblogs.asp.net/ricardoperes/…

Ricardo Peres 16.10.2015 16:22

Другие вопросы по теме