2008-09-11 17 views
47

Hace un tiempo que uso IPC en el código de win32. [Secciones críticas, eventos & semáforos]Mecanismos de IPC en C# - Uso y mejores prácticas

¿Cómo es la escena en .NET environment? ¿Hay algún tutorial que explique todas las opciones disponibles y cuándo y por qué?

+1

¿Qué necesitas hacer? Si necesita sincronizar el acceso a algún recurso externo, puede usar un Mutex para implementar la sincronización entre procesos. –

+4

+1. Gracias a Dios. Esta es la primera instancia de preguntas con sabor a "Mejores Prácticas" que no está marcado como no constructivo/fuera del tema [que he visto nunca]. –

Respuesta

3

También hay .NET Remoting, que me pareció bastante fresco, pero supongo que están obsoletos ahora que tienen WCF.

+0

¿Alguna vez Microsoft realmente dijo eso? – Mark

+0

No tengo idea. Es solo mi suposición. – ibz

+9

Tienen: "Este tema es específico de una tecnología heredada que se conserva para compatibilidad con versiones anteriores con aplicaciones existentes y no se recomienda para nuevos desarrollos.Las aplicaciones distribuidas ahora deben desarrollarse utilizando Windows Communication Foundation (WCF). "De http://msdn.microsoft.com/en-us/library/kwdt6w2k.aspx – Lucas

10

Tiendo a usar named pipes o sockets 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 fácilmente interoperar 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.

+3

Si bien este puede haber sido el caso en septiembre de 2008 (cuando este se hizo un comentario), es 2011 y WCF en Mono ya es bastante maduro. Consulte la [Mono WCF Development page] (http://www.mono-project.com/WCF) y juzgue por usted mismo. –

3

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 más concise overview.

10

Aparte de lo obvio (WCF), hay una ZeroMQ vinculante para C#/CLR que es bastante bueno:

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

¿Tiene orientado a mensajes IPC, 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 los 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.

+3

** "share by comunicarse en lugar de comunicarse compartiendo "** Esto debe recitar todos los días por cualquiera que esté haciendo una programación concurrente. –

+1

¿Qué significa esto? – Believe2014

+0

Lo interpreto como que en lugar de compartir recursos y hacer que cada programa intente reclamarlo a voluntad , debe hacer que los programas se comuniquen directamente entre sí con IPC. En el primer escenario, sus programas "se comunican" mediante el bloqueo de un recurso compartido. En el segundo, se comunican a través de algún protocolo para coordinar el uso del recurso compartido. – jmathew