Mecanismos de IPC en C#- Uso y mejores prácticas
.net (6)
Aparte de lo obvio (WCF), hay un enlace ZeroMQ para C # / CLR, que es bastante bueno:
http://www.zeromq.org/bindings:clr
Tiene IPC orientado a mensajes, pub / sub y varias otras estrategias con mucho menos código y configuración que WCF.
También es al menos un orden de magnitud más rápido que cualquier otra cosa y tiene menos latencia si requiere comunicaciones de baja latencia.
Con respecto a semáforos, bloqueos, mutexes, etc. Si compartes comunicándote en lugar de comunicarte compartiendo, tendrás una carga completa menos complicada que el paradigma tradicional.
He usado IPC en el código de win32 hace un tiempo. [Secciones críticas, eventos y semáforos]
¿Cómo es la escena en el entorno .NET? ¿Hay algún tutorial que explique todas las opciones disponibles y cuándo usarlo y por qué?
Lo más reciente de Microsoft en IPC es Windows Communication Foundation . En realidad, no hay nada nuevo en el nivel inferior (tcp, upd, named pipes, etc.). WCF simplifica enormemente el desarrollo de IPC.
Recurso útil:
- Comunicación entre procesos con WCF en el portal del Dr. Dobb
- Opciones de comunicación de WCF en .NET Framework 3.5
y por supuesto MSDN en WCF
Parece que le interesan las técnicas de sincronización en lugar de la comunicación. Si es así, le gustaría comenzar here , o quizás esta descripción más concisa .
Recomendaría usar archivos mapeados de memoria si necesita usar en el dominio de la máquina, no comunicación a través de la red. Vea el siguiente enlace.
http://techmikael.blogspot.com/2010/02/blazing-fast-ipc-in-net-4-wcf-vs.html
También hay .NET Remoting, que encontré bastante genial, pero supongo que están obsoletos ahora que tienen WCF.
Tiendo a usar named pipes o sockets de Unix (dependiendo de si estoy apuntando a MS.NET o Mono - tengo una clase que lo abstrae) ya que es fácil de usar, portátil y me permite interactuar fácilmente con código no administrado . Dicho esto, si solo está tratando con el código administrado, vaya con WCF o de manera remota, este último si necesita soporte Mono, ya que su soporte WCF simplemente no está allí todavía.