자바 쓰레드의 I/O 블락킹(blocking)에 대해서 알아보자.
자바 쓰레드의 I/O 블락킹(blocking)
두 쓰레드가 서로 다른 자원을 사용하는 작업의 경우에는 싱글쓰레드 프로세스보다 멀티쓰레드 프로세스가 더 효율적이다. 예를 들면 사용자로부터 데이터를 입력받는 작업, 네트워크로 파일을 주고받는 작업, 프린터로 파일을 출력하는 작업과 같이 외부기기와 입출력을 필요로 하는 경우가 이에 해당한다.
만일 사용자로부터 입력받는 작업(A)과 화면에 출력하는 작업(B)을 하나의 쓰레드로 처리한다고 하면 사용자가 입력을 마칠 때까지 아무 일도 하지 못하고 기다리기만 해야한다. 그러나 두개의 쓰레드로 처리한다면 사용자의 입력을 기다리는 동안 다른 쓰레드가 작업을 처리할 수 있기 때문에 보다 효율적인 CPU의 사용이 가능하다.
쓰레드가 입출력(I/O)처리를 위해 기다리는 것을 I/O블락킹이라고 한다.
ex) 싱글 쓰레드일 때 I/O블락킹이 발생한다.
메인에다 입출력을 같이 받을 때, 메인 쓰레드 한개만 사용하므로 싱글 쓰레드이다. 그래서 입력을 받을 때 까지 10에서 1까지 카운트다운을 하지 않는다. 입력을 마쳐야 카운트다운이 화면에 출력된다.
ex) 멀티쓰레드로 I/O블락킹이 발생하지 않는다.
싱글 쓰레드와 달리 멀티 쓰레드로 th에서는 카운트다운을 출력하고, 메인쓰레드에서는 값을 입력 받는다. 두 개의 쓰레드로 나누어서 처리했기 때문에 사용자가 입력을 마치지 않았어도 화면에 숫자가 출력되는 것을 알 수 있다.
'언어공부 > Java' 카테고리의 다른 글
자바 쓰레드 동기화(synchronization) (0) | 2021.05.31 |
---|---|
자바 쓰레드 스케쥴링 메소드-sleep(), interrupt(), suspend(), resume(), stop(), join(), yield() (0) | 2021.05.31 |
자바 멀티쓰레드 (0) | 2021.05.31 |
자바 람다식(Lambda Expression, 익명함수), 함수형 인터페이스(Functional Interface), 메소드 참조 (0) | 2021.05.30 |
자바 내부 클래스의 종류와 익명클래스(anonymous class) (0) | 2021.05.30 |