문제

Java 코드를 NIO를 사용하도록 변환하는 과정에 있지만 디자인하는 가장 좋은 방법은 확실하지 않습니다.

나의 초기 접근법은 선택기 스레드 풀을 만드는 것이었다. 스레드는 필요에 따라 시작/죽이고, 채널은 라운드 로빈 방식으로 연결/수락 될 때 선택기 스레드에 등록됩니다. 거기에서 select ()의 각 스레드 블록과 깨어날 때 선택한 키가있는 각 채널과 관련된 적절한 콜백이 실행됩니다.

이 "다중 선택기 스레드"디자인 외에도 사람들은 단일 선택기 스레드와 디스패치 스레드 풀을 사용한다고 말하는 것을 보았습니다. IO 작업을 수행 할 준비가되면 선택기는 디스패처 스레드를 알리고 요청을 처리합니다. 이 모델은 IO 스레드를 차단하지 않는 이점이 있지만 이제는 모든 IO를 단일 스레드로 강요하고 디스패처의 동기화/이벤트 큐를 처리합니다.

또한 각 채널을 읽기 위해 단일 직접 바이트 버퍼를 사용하여 콜백에 직접 전달할 수 없습니다. 대신 읽기가 배열로 발생하고 재설정 될 때마다 데이터를 복사해야합니다. (제 생각에는..)

이것을 구현하는 가장 좋은 방법은 무엇입니까?

도움이 되었습니까?

해결책

살펴보십시오 원자로 패턴

http://gee.cs.oswego.edu/dl/cpjslides/nio.pdf

셀렉터가 작동하기를 원하는 방법은 실제로 Usecase에 달려 있습니다. (연결 수, 메시지 크기 등)

IO에서 NIO로 변환하여 해결하려는 문제는 무엇입니까?

다른 팁

당신은 정말로 미나를 조사해야합니다.

http://mina.apache.org/

언급 한 모든 문제를 해결합니다.

또한 살펴보십시오 네티 이것은 정말 빠르고 특징이 풍부하며 대형 시스템과 Redhat (Jboss), Twitter, Facebook과 같은 대기업에서도 사용됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top