>  기사  >  Java  >  Java로 네트워크 IO 구현 소개(그림 및 텍스트)

Java로 네트워크 IO 구현 소개(그림 및 텍스트)

黄舟
黄舟원래의
2017-03-17 10:03:551413검색

이 글은 주로 Java(BIO, NIO, AIO)에서의 네트워크 IO 구현에 대한 관련 정보를 소개합니다. 필요한 친구들은

인 네트워크 프로그래밍을 참고하세요. 가장 많이 노출되는 것은 네트워크 통신 개발을 위해 Socket을 사용하는 것입니다. Java에는 크게 BIO, NIO, AIO의 세 가지 구현 방법이 있습니다.

이전에는 이 세 가지 개념에 대한 분석을 항상 이해하고 있는 것 같았으나, 그 분석을 완전히 명확하게 하기 위해 표현이 그다지 명확하지 않았습니다.

1. BIO 방식

우선 좀 더 대중적인 언어로 설명하겠습니다.

BIO가 IO를 차단하고 있습니다. 모든 TCP 서버에 연결할 때 연결을 설정하고 메시지를 처리하기 위해 스레드를 생성해야 합니다. 연결 설정, 데이터 읽기, 데이터 쓰기 등 중간에 차단이 발생하면 스레드도 차단됩니다. 동시 상황에서는 N개의 연결을 처리하는 데 N개의 스레드가 필요합니다.
이 방법의 단점은 동시 조건에서 매우 비효율적이라는 것입니다.

다음은 BIO의 동작을 도식화한 것이다

2. >NIO는 JDK1.4에서 제안되었습니다. 먼저 NIO의 작동 원리를 간단하게 설명하겠습니다.

NIO는

이벤트

를 기반으로 하는 Non-Blocking IO입니다. 드라이버아이디어(Reactor 스레드 모델). BIO와 비교하여 NIO는 하나의 스레드를 사용하여 선택기 메커니즘을 기반으로 하는 모든 소켓 채널을 관리합니다. 이벤트가 쿼리되면(연결, 연결 승인, 읽기, 쓰기) 다른 처리 스레드(핸들러)로 전달됩니다. Reactor 모델의 작동 응용 다이어그램은 다음과 같습니다.


3. 🎜>

AIO는 비동기 IO인 JDK1.7에서 제안되었습니다. AIO는 Proactor 모드를 사용합니다. 가장 먼저 분석해야 할 것은 AIO와 NIO의 차이점입니다.

(1) NIO 알림은 Handler보다 먼저 발생합니다. (2) AIO 알림은 읽고 쓰기 등을 한 후에 발생하는 콜백입니다. 알림이 있는 경우 해당 작업이 종료되었음을 의미합니다.

AIO가 읽기 및 쓰기 작업을 수행할 때 해당 읽기/쓰기 메서드를 호출하고 CompletionHandler(작업 완료 핸들러)를 전달하면 작업이 완료된 후 CompletionHandler가 호출됩니다. NIO 알림은 읽기 및 쓰기가 가능할 때 발생합니다. Selector가 이러한 이벤트를 발견한 후 처리를 위해 Handler에 알리고 호출합니다.

Proactor 모드의 워크플로 다이어그램은 다음과 같습니다.

위 내용은 Java로 네트워크 IO 구현 소개(그림 및 텍스트)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.