현재 운동으로 간단한 P2P 네트워크를 개발 중입니다. 네트워크의 각 노드는 하트 비트를 다른 노드의 서브 세트로 전송하여 네트워크에서 나간 노드를 감지 할 수 있습니다. 하트 비트 패킷 옆에 새 노드가 네트워크에 가입/탈퇴 할 때 패킷을 보내고 리소스 (작은 텍스트 파일)를 찾고 싶을 때 패킷을 보냅니다. 모든 패킷은 UDP 패킷입니다.들어오는 많은 패킷을 처리하는 가장 좋은 방법
패킷을받을 때마다 해당 특정 패킷을 처리하는 새 스레드가 시작됩니다. 그러나 나는 한 응용 프로그램 수명 동안 시작하는 스레드의 양에 많은 관심을 가지고 있습니다 (특히 하트 비트 때문에). (교착 상태 등의 위험이 있으므로 피하고 싶습니다.)
들어오는 모든 패킷을 넣고 그 큐에서 한 번에 하나씩 모든 패킷을 처리하는 단일 스레드 (생산자 - 소비자 패턴과 같은 것)가있는 큐에 대해 생각했습니다. 패킷을 빠르게 처리하여 보낸 사람이 패킷이 손실되었다고 생각하지 않도록하고 싶습니다.
각 수신 패킷을 새로 시작하지 않고도 많은 수신 패킷을 처리하는 가장 좋은 방법은 무엇입니까? 내가 가진 것, 프로듀서를 소비하는 것 또는 다른 무엇인가를 가져야합니까?
물론입니다. LinkedList와 함께 producer-consumer를 사용하십시오. 내가 생각할 수있는 가장 쉬운 방법. – DankMemes
자신이 언급 한 방식처럼 구식으로 시작하고 벤치 마크를 수행 한 다음 "Disruptor"(http://lmax-exchange.github.com/disruptor/)와 같은 최신 항목을 시도한 다음 더 많은 작업을 수행 할 수 있습니다 벤치 마크. –
"들어오는 많은 패킷"을 정량화하는 데 도움이 될 수 있습니다 ... 상대적으로 말하면 하트 비트는 많이 사용하지 않아야합니다. 현대 시스템은 일반적으로 NIC의 수와 유형에 따라 초당 수천에서 수천 개의 패킷을 처리 할 수 있습니다 . 나는 심장 박동이 분당 수십 개의 범위에서 더 많을 것으로 생각한다. – twalberg