SocketChannels
을 사용하고 있더라도 channels
을 처리하려면 스레드 풀을 사용해야합니다.
둘 다 폴링 select()
에 대한 책임이 오직 하나 개의 스레드를 사용하는 scenairo에 대해 생각하고 처리하는 것은 SocketChannels
한 채널 처리 1 초 정도 소요되며, 큐에 10 개 채널이있는 경우, Selectors
에서 선택, 당신이에 의미 다음 폴링 전에 10 초를 기다려야합니다. 따라서 채널 처리를위한 스레드 풀이 있어야합니다.
이 의미에서 나는 클라이언트 당 스레드 차단 소켓 패턴에 엄청난 차이점을 보지 못했습니다. 주요 차이점은 NIO
패턴이며, 작업은 더 작고, 작업 당 스레드와 비슷하며, 작업을 읽고, 쓰고, 프로세스 등을 자세히 처리 할 수 있습니다. Netty의 구현 NioServerSocketChannelFactory
, 하나의 Boss 스레드가 연결을 허용하고 처리를 위해 Worker 스레드 풀에 작업을 디스패치합니다.
정말 한 스레드에서 멋지다면 최소한 I/O 풀링을해야합니다. 스레드는 입출력 작업이 종종 명령 처리주기보다 느리기 때문에 귀중한 하나의 스레드가 입출력에 의해 차단되는 것을 원하지 않으며 정확하게 NodeJS 한 스레드 수신 연결을 사용하고 모든 I/O는 비동기이며 병렬 처리됩니다. 백엔드 I/O 스레드 풀에 의해 중단됩니다.
은 이전 스타일의 스레드 당 클라이언트가 죽었습니까? NIO 프로그래밍이 복잡하고 멀티 스레드가 자연스럽지 않은 것은 아닙니다. 최신 운영 체제와 CPU가 멀티 태스킹에서 더 좋아지고 개선됨에 유의하십시오. 따라서 멀티 스레딩의 오버 헤드가 시간이 지남에 따라 줄어 듭니다.
배경이 아닌 내용 때문에 질문을 downvoted 다른 사람을 사과해야합니다. 동료 대학원생으로서, 특히 귀하의 연구 분야에 정확히 속하지 않은 과정을 강요 할 때, 특히 귀하의 연구비가 연구 분야에 달려있을 때 특히 그렇습니다. 나는 당신이 여기에 와서 해명을 구하는 것도 좋다고 생각합니다. –