아하
  • 토픽

  • 스파링

  • 잉크

  • 미션


진실한재칼194

진실한재칼194

자바 NIO와 IO 용어설명좀 부탁드릴게요

흔히 기존 자바 IO의 단점을 보완한게 NEW IO 즉

NIO로 알고있는데요 각각의 용어설명좀 부탁드려요

    1개의 답변이 있어요!

    • 허허실실

      허허실실

      자바 버전 4부터 새로운 입출력 이라는 뜻에서 java.nio 패키지에 포함이 되었다가

      자바 버전 7로 버전 업을 하면서 자바 IO 와 NIO 사이의 일관성이 없는 클래스 설계를 바로 잡고

      비동기 채널 등의 네트워크를 지원을 대폭 강화시킨 NIO.2 API 가 추가되었습니다.

      IO와 NIO의 차이점은 크게 4가지로 나뉩니다.

      • 입출력방식 : IO (스트림 방식), NIO (채널방식)

      • Buffer 방식 : IO (non buffer), NIO (buffer)

      • 비동기 방식 : IO (지원안함), NIO (지원)

      • 블로킹/넌블로킹 방식 : IO (블로킹만 지원), NIO (블로킹/넌블로킹 모두 지원)

      NIO는 불특정 다수의 클라이언트와 연결 또는 멀티 파일들을 넌블로킹이나 비동기 처리를 할 수 있습니다.

      해서 과도한 스레드 생성을 피하고 스레드를 효과적으로 재사용한다는 장점이 있습니다.

      운영 체제의 버퍼를 이용한 입출력이 가능하기 때문에 입출력 성능이 향상됩니다. 물론 언제나 그런것은 아닙니다.

      NIO는 연결 클라이언트 수가 많고, 하나의 입출력 처리 작업이 오래걸리지 않는 작업에 사용하는 것이 좋습니다.

      스레드에서 입출력 처리가 오래 걸린다면 대기하는 작업의 수가 늘어나기 때문에 제한된 스레드로 처리하는 것이 불편할 수도 있습니다.

      대용량 데이터를 처리하는 경우라면 IO가 좋습니다.

      NIO는 버퍼 할당 크기가 문제가 되고 모든 입출력 작업에 버펴를 무조건 사용해야 하기 때문에 즉시 처리하는 IO보다 조금 복잡합니다.

      연결 클라이언트 수가 적고 전송되는 데이터가 대용량이면서 순차적으로 처리될 필요성이 있다면 IO로 서버를 구현하는 것이 좋습니다.