2012-12-03 2 views
1

여기 내 시나리오는 다음과 같습니다. 소켓에서 읽고 패킷의 내용을 기반으로 패킷을 적절한 큐에 넣습니다. 따라서 10 개의 큐가있는 경우 10 개의 if-else -ifs 또는 10 개의 switch 문이 올바른 큐를 선택합니다. 그래서, 거의 10 가지 비교가있을 수 있습니다.비 스레드 설계 또는 다중 스레드 설계?

또 다른 방법은 방송국/서버에 각 포트의 피드가 하나의 특정 큐에 대한 패킷을 가지고있는 10 개의 다른 포트에서 브로드 캐스팅하도록 요청하는 것일 수 있습니다. 내 마지막에는 개별 소켓을 통해 각 소켓을들을 수 있습니다 (또는 특정 포트의 트래픽이 적거나 비 균일하면 스레드 풀을 사용할 수 있음). 이제는 패킷이 속한 큐를 선택해야하지만 지금은 conext 스위치의 현상이 도입되었습니다.

여기에서 내 지능과 기술적 지식을 통해 나를 더 멀어지게합니다. 어떤 접근법이 더 잘 수행 될지에 대한 확대가 있습니까?

+0

UDP 질문입니까? 그렇다면 패킷이 아니라 데이터 그램을 읽습니다. –

+0

C++ 11을 사용하고 계시다면 쉽게 사용하실 수 있습니다! –

+0

@ 코딩 마쉬 고마워요.하지만 어떻게해야합니까? –

답변

0

개인 선택입니다. 트래픽이 충분하거나 분명하지 않은 경우 첫 번째 방법이 더 좋습니다. threadconfinement 덕분에 스레드로부터 안전합니다. 유지 관리가 더 쉽습니다. 유일한 문제는 추가 포트가 추가 된 경우 추가 if 절의 코드를 수정해야한다는 것입니다.

트래픽이 많은 상황에서 더 좋을 수 있습니다. 버퍼가 가득 차면 더 적은 패킷이 손실됩니다. 코어의 수에 따라 성능이 향상 될 수 있지만 잘 실행되지 않으면 다시 버그가 발생할 수 있습니다.

내가 너라면, 첫 번째로 나갔을 것이다. 단순하게 유지하십시오.

0

Linux가 epoll을 시도하면 Windows에서 IO 완료 포트 (IOCP)를 체크 아웃하는 경우. 그것들은 (일반적으로) 두 시스템에서 가장 효과적인 모델 인 경향이 있습니다. Windows IOCP 모델은 OS를 통해 스레드 풀에 잘 바인딩 될 수 있습니다.