IO, NIO

박현석·2024년 7월 4일

데이터의 입출의 목적을 가지고 사용하는 기술이다.
Java의 nio의 패키지에 통합되어있다..

둘의 차이점은 입출력하는 방식에서 차이가 난다.


IO는 입력과 출력이 한쪽방향에서 메모리를 읽는다.
반면 NIO는 양방향으로 입력과출력이 가능해 별도의 채널을 생성할 필요없음


그림을 보면 IO는 입력과 출력 스트림이 따로존재해 한방향으로만 흘러가는 느낌이다. 즉 Blcoking 형식의 느낌이 강하다.

NIO는 버퍼를 두어 여러 입력을 한꺼번에 받고 처리하기에 용이하다.

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

Blocking 과 Non-Blocking

IO는 기본적으로 Blocking 이다
입력 스트림의 read() 을 호출하면 데이터의 입력 전까지 스레드의 상태가 Blocking(대기상태) 가 된다.

IO스레드가 다른일을 하려면 입력과 출력을 포함한 스트림을 닫는 방법뿐이다.
(interrupt 불가능)

반면 NIO는 블로킹 상태에서 interrupt 하면서 빠져나올수 있고,
Non-blocking 을 지원하여 스레드가 대기상태로 빠지지 않을수 있다.

동기와 비동기

동기 라는것은 요청을 보내고 실행이 끝나면 다음요청을 처리하는 방식
비동기 라는것은 요청을 보내고 동작처리여부와 관계없이 다음 요청이 진행되는 방식

profile
너에게만광대

0개의 댓글