최근에 NIO에 관해 배웠습니다. NIO의 주된 이점은 NIO의 비 차단 기능 덕분에 단 하나 (또는 소수)의 스레드로 많은 연결을 처리 할 수 있다는 것입니다. 그러나 우리는 Executors를 사용하고 작업자 스레드 목록을 가지고이 목표를 달성 할 수 있습니까?Java 실행 프로그램 대신 NIO (또는 netty와 같은 프레임 워크)를 사용해야하는 이유는 무엇입니까?
나는 Executor보다 NIO의 이점을 볼 수 없습니다. 대신 집행자는 NIO를 사용하는 것보다 NIO를 사용하는 것이 낫다고 생각합니다. 예를 들어 readLin() 만 호출하면되지만 NIO에서는 메시지가 부분인지 또는 버퍼에 여러 메시지가 있는지 확인해야합니다.
실행자의 실행 기능을 호출하는 executor의 영혼에도 비 차단 기능이 있습니다. 기본적으로 버퍼에 연결을 추가하고 스레드의 고정 번호가 비어있는 것을 기다립니다.
그럼 왜 누군가가 집행자를 사용하는 대신 NIO를 사용합니까?
감사
당신은 하나의 스레드에서 여러 개의 블로킹 소켓을 처리 할 수 없습니다. '집행자'뒤에 숨어도 변경되지 않습니다. – EJP
수신 된 각 소켓에 대해 executor의 execute 메소드를 호출하고 스레드가 하나 뿐인 executor가있는 경우이 스레드는 이러한 소켓을 하나씩 처리합니다. 내가 잘못? –
예. 먼저 읽은 책을 읽지 못하게 할 것입니다. – EJP