>  기사  >  Java  >  Java NIO의 비차단 서버

Java NIO의 비차단 서버

王林
王林앞으로
2023-08-19 18:49:071233검색

Java NIO中的非阻塞服务器

비차단 서버

Java NIO(새 입력/출력)는 JDK 4 출시 이후 더욱 정교한 기능이 추가됨에 따라 Java의 표준 IO API를 대체하는 매우 강력한 네트워킹 및 파일 처리 응용 프로그램입니다. 수많은 엔지니어들의 I/O 시스템

Java NIO에서 제공하는 향상된 파일 처리 및 파일 시스템 기능 지원은 차별화된 기능 중 하나입니다. NIO 파일 클래스는 이러한 강력한 기능을 가지고 있기 때문에 파일 처리에 널리 사용됩니다.

자세히 살펴보면 java.nio 패키지가 NIO API에 사용되는 버퍼 클래스를 지정한다는 것을 알 수 있습니다. 가장 좋은 점은 Java 프로그래머가 네이티브 코드를 작성하지 않고도 빠른 I/O를 달성할 수 있도록 만들어졌다는 것입니다.

차단 및 비차단 I/O

비차단 I/O 사용으로 인해 비차단 서버는 동일한 프로세스나 스레드를 통해 여러 요청을 동시에 처리할 수 있습니다. 차단 프로세스를 각 고객이 계속하기 전에 앞에 있는 사람이 서비스를 받을 때까지 기다려야 하는 매표소의 대기열로 생각하십시오.

반면, 비차단 프로세스는 모든 고객을 순환하며 주문을 처리함으로써 동시에 모든 고객에게 서비스를 제공하려는 레스토랑의 웨이터와 같습니다.

차단 서버는 동기식으로 작동하여 다음 요청으로 넘어가기 전에 각 요청을 완료합니다. 이로 인해 클라이언트 대기 시간이 길어지고 각 요청을 처리하기 위해 여러 스레드가 필요하므로 CPU 요구량이 더 많아집니다. 반면, 비차단 서버는 비동기식 접근 방식을 취하여 하나의 스레드가 동시에 여러 쿼리를 처리하고 각 요청 완료에 반응할 수 있도록 합니다.

Java NIO의 기능

Java NIO에는 다른 IO 시스템과 차별화되는 몇 가지 고유한 기능이 있습니다. 다음은 Java NIO의 주요 기능입니다:

  • A동기식 및 비차단 IO − 이 기능을 사용하면 처리가 시작되기 전에 데이터가 완전히 로드될 때까지 기다리는 대신 스레드가 다른 작업을 수행할 수 있습니다. 데이터를 읽는 중입니다.

  • 버퍼 중심 접근 방식 − Java NIO는 데이터를 버퍼에 저장하므로 빠르게 액세스하고 처리할 수 있습니다. 데이터가 필요할 때 버퍼에서 검색하여 처리합니다.

알고리즘

  • 1단계 − 먼저 import 문을 사용하여 필요한 클래스를 가져와야 합니다.

  • 2단계 − 다음으로 "WriteExample2"라는 공개 클래스를 만들어야 합니다.

  • 3단계 − 이 클래스 내에서 문자열 유형의 변수 인수를 허용하는 public static void 메인 함수를 정의해야 합니다.

  • 4단계 − 이제 Files.createTempFile() 메서드를 사용하여 ".txt" 확장자를 가진 임시 파일을 생성합니다. 문자열 "Hello" 및 "world"

  • 5단계 − Files의 createTempFile() 함수에서 반환된 Path 개체에 의해 정의된 파일에서 모든 바이트를 읽으려면 Files.readAllBytes() 함수를 사용할 수 있습니다. 그런 다음 해당 바이트를 파일로 변환해야 합니다. 새로운 String() 생성자를 사용하는 문자열입니다.

  • 6단계 − 마지막으로 System.out.println() 메서드를 사용하여 문자열을 콘솔에 인쇄합니다.

예 1

이 Java 코드는 임시 텍스트 파일을 생성하고 "Hello" 및 "world"를 쓴 다음 파일을 읽고 해당 내용을 인쇄합니다. 코드는 Java NIO 패키지의 Files 클래스를 사용하여 파일 작업을 처리합니다.

으아악

출력

으아악

Java NIO의 구성 요소

Java NIO는 버퍼, 채널 및 선택기의 세 가지 기본 구성 요소를 기반으로 구축되었습니다. 각 구성 요소에 대한 간략한 개요는 다음과 같습니다.

  • Buffer− 버퍼는 데이터가 한 위치에서 다른 위치로 전송되는 동안 데이터를 임시로 저장하는 데 사용되는 메모리 블록입니다. Java NIO에서는 데이터를 쉽게 읽고 쓰기 위해 버퍼를 사용합니다.

  • Channels - Java NIO에서 채널은 파일 및 소켓과 같은 IO 작업을 수행할 수 있는 객체에 대한 연결을 나타냅니다. 채널은 버퍼와 버퍼가 나타내는 객체 간의 데이터 전송을 담당합니다.

  • 선택기 − 선택기는 I/O 작업 수행 준비와 같은 이벤트에 대해 하나 이상의 채널을 모니터링하는 데 사용되는 Java NIO 구성 요소입니다. 채널이 준비되면 선택기가 깨어나 적절한 스레드를 허용할 수 있습니다. 작업을 처리합니다.

논블로킹 서버 구성

비차단 서버는 비차단 방식으로 읽기 및 쓰기 IO 작업을 모두 처리하는 구성 요소 체인인 비차단 IO 파이프라인으로 구성됩니다. −

  • 선택기는 파이프라인의 각 구성 요소에서 채널에 읽을 데이터가 있는지 확인하는 데 사용됩니다.

  • 데이터가 있으면 구성 요소가 이를 읽고 이를 기반으로 출력을 제공한 후 출력이 다시 채널에 기록됩니다.

  • 구성 요소를 기반으로 비차단 IO 파이프는 데이터를 읽고 쓸 수 있을 뿐만 아니라 두 작업을 모두 수행할 수 있습니다.

  • 이 구성 요소는 선택기를 통해 채널에서 데이터를 읽습니다. Java NIO는 비차단 IO 작업을 관리하는 반면, 선택기와 선택 가능한 채널 선택 키는 다중화된 IO 작업을 정의합니다.

  • 비차단 IO 파이프라인은 비차단 데이터 처리와 함께 데이터를 논리적으로 정렬되거나 결합된 메시지로 나눕니다. 이는 Java의 StreamTokenizer 클래스를 사용하여 데이터 스트림을 처리하기 전에 토큰화하는 것과 비슷합니다.

  • 비차단 모델은 Java NIO 선택기를 사용하여 읽을 데이터가 있는 SelectableChannel 인스턴스만 확인하고 제공합니다. 이는 InputStream과 유사한 인터페이스를 사용하고 한 번에 1바이트만 읽을 수 있도록 허용하는 차단 IO 파이프라인과 대조적입니다.

서버 읽기/쓰기 작업에 대한 차단 및 비차단 모델 비교

서버 아키텍처 세계에서 읽기 및 쓰기 작업에 차단 또는 비차단 모델을 사용하도록 선택하면 서버의 효율성과 확장성에 큰 영향을 미칠 수 있습니다.

비차단 모델은 프로세스가 비차단 I/O 호출을 인터리빙하여 여러 동시 요청을 처리할 수 있도록 하는 차단 모델의 반대입니다.

이러한 모델 간의 차이점을 설명하기 위해 두 개의 요청을 수신하는 가상의 서버를 생각해 보겠습니다. 차단 모델에서 프로세스는 요청 B로 이동하기 전에 요청 A가 완전히 처리될 때까지 기다려야 합니다. 이와 대조적으로 비차단 모델은 요청 A와 B의 처리를 인터리브하여 두 요청을 동시에 처리할 수 있습니다.

Java NIO는 단일 스레드가 여러 채널을 제어할 수 있게 하고 비차단 I/O를 지원합니다.

버퍼와 반대쪽 개체를 연결하는 채널은 비동기 데이터 전송을 가능하게 합니다. SocketChannel과 ServerSocketChannel이라는 두 클래스는 Java NIO 채널을 구현하고 TCP 연결을 통해 데이터를 수신하고 쓸 수 있게 해줍니다.

서버 설계자는 적절한 I/O 모델을 선택하여 효과적이고 확장 가능하며 수많은 동시 요청을 관리할 수 있는 시스템을 만들 수 있습니다.

결론

Java NIO는 파일 처리 및 파일 시스템 기능에 대한 향상된 지원을 갖춘 강력한 네트워킹 및 파일 처리 애플리케이션을 제공합니다. 비동기식 및 비차단 I/O, 버퍼 지향 접근 방식, 버퍼, 채널 및 선택기의 세 가지 기본 구성 요소를 통해 독특한 I/O 시스템입니다.

Java NIO의 비차단 서버 모델은 비차단 I/O 파이프를 사용하여 여러 요청을 동시에 처리할 수 있습니다. 블로킹 I/O 파이프와 달리 비블로킹 모델은 실제로 읽을 데이터가 있는 SelectableChannel 인스턴스만 확인하고 제공하므로 더 빠르고 효율적인 시스템이 됩니다.

위 내용은 Java NIO의 비차단 서버의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 tutorialspoint.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제