C#에서 비동기 다중 서버 네트워크 응용 프로그램을 작성하는 동안 문제가 발생했습니다. 스레드 풀에 의해 처리되는 작업이 많으며 여기에는 네트워크 소켓에 쓰기 작업이 포함됩니다. 이것은 하나 이상의 스레드가 동시에 소켓에 쓸 수 있고 보내는 메시지를 분리 할 수있는 경우를 허용합니다. 이 문제를 해결하기위한 나의 아이디어는 큐에 데이터가 추가 될 때마다 소켓이 소켓 시스템에 메시지를 쓸 수있는 큐 시스템을 구현하는 것이 었습니다.비동기식 대기열 관리자
내 문제는이 성격의 아키텍처를 둘러싼 내 머리를 감쌀 수 없다는 것입니다. 데이터가 큐에 추가 될 때마다 이벤트를 발생시키는 큐 객체가 있다고 가정합니다. 그런 다음 이벤트는 대기열에 보관중인 데이터를 씁니다.하지만 두 개의 스레드가 동시에 대기열에 추가되면 대기열이 스레드 안전성을 갖더라도 이벤트가 계속해서 발생하고 나는 똑같은 문제를 겪을 것이다. 그렇다면 어쩌면 다른 이벤트가 진행 중일 때 이벤트를 중단 할 수도 있지만, 일단 뮤텍스 또는 일부 이벤트에서 스레드를 차단하지 않고 첫 번째 이벤트가 끝나면 어떻게 계속 진행할 수 있습니까? "block nothing"아키텍처를 엄격하게 유지하려고 시도하지 않는다면 그렇게 어렵지 않을 것입니다.하지만이 특정 응용 프로그램에서는 스레드 풀 스레드가 자신의 일을 계속하도록 허용해야합니다.
아이디어가 있으십니까?
'new BlockingCollection (new ConcurrentQueue ())'new BlockingCollection ()'와 정확히 같습니다. :) –
porges
알아두면 좋지만 일반적으로 이니셜 라이저를 사용하는 것이 좋습니다. 누군가가 무엇이 기본값인지 모를 때 더 명확하게 만듭니다. (그리고 "var"는 모든 것을 반복 할 필요가 없습니다) – Brunner
매우 유용합니다, Alex. 내 베이컨을 구 했어. –