Hemos implementado una cola de mensajes utilizando C# Queue
. Sabemos que solo tenemos un consumidor para sacar el mensaje disponible de la cola para su procesamiento con un bucle while
. También sabemos que solo hay UN productor para poner un mensaje en la cola.pensamiento de cola de mensajes
Tenemos una cola de mensajes en la parte superior de lock
para asegurarnos de que el consumidor y el productor no puedan acceder a la cola simultáneamente.
Mi pregunta es ¿es lock
necesario? Si el Queue
aumenta su propiedad Count
DESPUÉS, un artículo se agrega realmente y si el consumidor marca el Count
antes de recuperar, el consumidor debe obtener un elemento de mensaje completo incluso si no tenemos ese lock
. ¿Derecha? Por lo tanto, no enfrentaremos un problema de elemento de mensaje parcial. Entonces podemos deshacernos de ese lock
?
Eso lock
ralentizará el sistema y ocasionalmente podemos ver que el hilo de recuperación está bloqueado por un tiempo porque tenemos un productor muy pesado.
EDIT:
Desafortunadamente estamos utilizando .Net 3.5.
Si puede utilizar .NET 4, que tiene un '' BlockingCollection y una 'ConcurrentQueue', en cuanto a rendimiento, ver http: //geekswithblogs.net/BlackRabbitCoder/archive/2010/06/07/c-system.collections.concurrent.concurrentqueue-vs.-queue.aspx –
Si tiene problemas de rendimiento, puede publicar algún código. Además, cuando dice que el productor es pesado, ¿qué tan pesado es, por ejemplo, elementos por segundo? –