티스토리 뷰

반응형

*_외부 io 에 관한 async *_에서 처리가 안되면 에러를 회신한다.

https://velog.io/@codemcd/Sync-VS-Async-Blocking-VS-Non-Blocking-sak6d01fhx

https://grip.news/archives/1304

https://www.youtube.com/watch?v=ReZGUG0f2Zs

목차

  1. NIO 소개
  2. 파일과 디렉토리
  3. 버퍼(Buffer)
  4. 파일 채널(FileChannel)
  5. TCP 동기(블로킹) 채널
  6. TCP 넌블로킹 채널
  7. UDP 채널
  8. 비동기 파일 채널
  9. TCP 비동기 채널

NIO 소개

  • NIO(New Input/Output)
  • 기존 java.io.API 와 다른 새로운 입출력 API를 말한다.
  • 자바 4에 처음 추가 되어 자바 7부터 네트워크 지원이 강화된 NIO2.API가 추가되었다.
  • 관련 패키지
NIO 패키지 포함된 내용
java.nio 다양한 버퍼 클래스
java.nio.channels 파일 채널, TCP 채널, UDP 채널 등의 클래스
java.nio.channels.spi java.nio.channels패키지를 위한 서비스 제공자 클래스
java.nio.charset 문자셋, 인코더, 디코더 api
java.nio.charset.spi java.nio.channels.spi패키지를 위한 서비스 제공자 클래스
java.nio.file 파일 및 파일 시스템에 접근하기 위한 클래스
java.nio.file.attribute 파일 및 파일 시스템의 속성에 접근하기 위한 클래스
java.nio.file.spi java.nio.file패키지를 위한 서비스 제공자 클래스

IO 와 NIO 차이점

구분 IO NIO
입출력 방식 스트링 방식( 단방향 데이터) 채널 방식(양방향)
버퍼 방식 넌버퍼(non-buffer) 버퍼(buffer)
동기/비동기 방식 동기 방식 동기, 비동기 모두 지원
블로킹, 논블로킹 방식 블로킹 방식 블로킹, 논블로킹 방식 모두 지원

스트림 vs 채널

  • IO 스트림: 입력스트림과 출력 스트림으로 구분되어 별도 생성됨.( 단방향 )
  • NIO 채널: 양방량으로 입력과 출력이 가능해 하나만 생성한다.

논버퍼/버퍼

  • IO 스트림 - 논버퍼(non buffer)

    • IO 에서는 1바이트씩 읽고 출력하기 때문에 느리다.
    • 보조 스트림인 BufferInputStream, BufferOutputStream을 사용해 버퍼를 제공할 수 있다.
    • 스트림으로부터 입력된 전체 데이터를 별도로 저장하지 않으면 입력 데이터의 위치를 이동해 자유롭게 이용할 수 없다.
  • NIO 채널 - 버퍼

    • 기본적으로 버퍼를 사용해서 입출력하기 입출력 성능이 좋다.
    • 읽은 데이터를 무조건 버퍼(Buffer: 메모리 저장소)에 저장하기 때문에 버퍼 내에서 데이터 위치를 이동해 가면서 필요한 부분만 읽고 쓸 수 있다.

블로킹 vs 논블로킹

  • IO 스트림 - 블로킹

    • 입력 스트림의 read() 메소드를 호출하면, 데이터가 입력되기 전까지 스레드는 블로킹(대기상태)이 된다.
    • 출력 스트림의 write() 메소드를 호출하면 데이터가 출력되기 전까지 스레드는 블로킹 된다.
    • 스레드가 블로킹되면 다른일을 할 수 없고, interrupt를 해서 블로킹을 빠져나올 수 없다.
    • 블로킹을 빠져나오는 유일한 방법은 스트림을 닫는 것이다.
  • NIO 채널 - 블로킹, 논블로킹

    • IO 블로킹과의 차이점은 NIO 블로키은 스레드를 interrupt 함으로써 빠져나올 수 있다.
    • NIO는 논블로킹을 지원하는데, 입출력 작업시 스레드가 블로킹되지 않는다.

IO 와 NIO 의 선택

  • IO 선택

    • 연결 클라이언트의 수가 적다.
    • 전송되는 데이터가 대용량이면서
    • 순차적으로 처리될 필요성이 있는 경우 사용한다.
  • NIO 선택

    • 연결 클라이언트 수가 많다.
    • 전송되는 데이터 용량이 적다
    • 입출력 작업처리가 빨리 끝난다.

반응형

'스프링, 자바' 카테고리의 다른 글

Lambda, Stream : wip  (0) 2021.01.24
자바의 직렬화(Java Serialization)  (0) 2021.01.24
jsp 와 세션  (0) 2021.01.19
jsp 와 쿠키  (0) 2021.01.19
jsp 소스 코드의 동작 과정  (0) 2021.01.19
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함