2016-07-13 7 views
3

최근에 NIO에 관해 배웠습니다. NIO의 주된 이점은 NIO의 비 차단 기능 덕분에 단 하나 (또는 ​​소수)의 스레드로 많은 연결을 처리 할 수 ​​있다는 것입니다. 그러나 우리는 Executors를 사용하고 작업자 스레드 목록을 가지고이 목표를 달성 할 수 있습니까?Java 실행 프로그램 대신 NIO (또는 netty와 같은 프레임 워크)를 사용해야하는 이유는 무엇입니까?

나는 Executor보다 NIO의 이점을 볼 수 없습니다. 대신 집행자는 NIO를 사용하는 것보다 NIO를 사용하는 것이 낫다고 생각합니다. 예를 들어 readLin() 만 호출하면되지만 NIO에서는 메시지가 부분인지 또는 버퍼에 여러 메시지가 있는지 확인해야합니다.

실행자의 실행 기능을 호출하는 executor의 영혼에도 비 차단 기능이 있습니다. 기본적으로 버퍼에 연결을 추가하고 스레드의 고정 번호가 비어있는 것을 기다립니다.

그럼 왜 누군가가 집행자를 사용하는 대신 NIO를 사용합니까?

감사

+1

당신은 하나의 스레드에서 여러 개의 블로킹 소켓을 처리 할 수 ​​없습니다. '집행자'뒤에 숨어도 변경되지 않습니다. – EJP

+0

수신 된 각 소켓에 대해 executor의 execute 메소드를 호출하고 스레드가 하나 뿐인 executor가있는 경우이 스레드는 이러한 소켓을 하나씩 처리합니다. 내가 잘못? –

+0

예. 먼저 읽은 책을 읽지 못하게 할 것입니다. – EJP

답변

0

멀티 스레딩은 최대한 빨리 확장 성 문제가 발생 NIO 때까지로 (또는 더 빨리보다)입니다. 스레드가 너무 많으면 성능이 NIO보다 낮습니다.

그러나

어떤 경우에는 멀티 스레딩 차단 IO 여전히 NIO보다 더이라고 말했다 : http://paultyma.blogspot.com/2008/03/writing-java-multithreaded-servers.html

+0

사실 그는 그가 요구 한 것이 아닙니다. NIO와 고정 된 스레드 수를 가진 유언 집행자에 대해 물었고, 그의 의견에서 그는 이상하게도 1의 고정 된 크기를 사용했습니다. – EJP

+0

당신은 그의 제안을 고려하고 있습니다. 그의 질문 제목은 여전히 ​​적절하다고 생각합니다. 의견을 보내 주셔서 감사 드리며 여기서 연결 당 스레드를 만드는 방법에 대해 설명하고 있음을 명확히 설명합니다. –