C# Queue
을 사용하여 메시지 큐를 구현했습니다. while
루프로 처리하기 위해 대기열에서 사용 가능한 메시지를 가져 오는 사용자가 하나 뿐인 것입니다. 또한 대기열에 메시지를 넣는 제작자는 단 한 명뿐입니다.메시지 큐 생각
위의 메시지 대기열에 lock
이있어 소비자와 생산자가 동시에 대기열에 액세스 할 수 없습니다.
제 질문은 lock
이 필요합니까? Queue
이 Count
속성을 AFTER 후에 실제로 추가하고 소비자가 검색하기 전에 Count
을 확인하면 소비자는 lock
이 없어도 완전한 메시지 항목을 받아야합니다. 권리? 따라서 우리는 부분적인 메시지 항목 문제에 직면하지 않을 것입니다. 그럼 우리는 그걸 없애 버릴 수 있어요 lock
?
그 lock
은 시스템 속도를 떨어 뜨리고 우리는 매우 생산자가 많기 때문에 검색 스레드가 잠시 중단되는 것을 볼 수 있습니다.
편집 :
불행하게도 우리는 닷넷 3.5을 사용하고 있습니다.
는 .NET 4를 사용할 수있는 경우를, 그것은'BlockingCollection가'과'ConcurrentQueue'는 성능으로, HTTP를 참조하십시오 //geekswithblogs.net/BlackRabbitCoder/archive/2010/06/07/c-system.collections.concurrent.concurrentqueue-vs.-queue.aspx –
성능 문제가있는 경우 몇 가지 코드를 게시 할 수 있습니까? 또한 제작자가 무겁다 고 말할 때 초당 항목 수는 얼마나됩니까? –