/ JAVAJUNGSUK

Ch13-7~13. I/O blocking

자바의 정석 기초편

0. 목차



Chapter13. 쓰레드

Ch13 - 7. main 쓰레드

Ch13 - 8. 싱글 쓰레드와 멀티 쓰레드

Ch13 - 9. 싱글 쓰레드와 멀티 쓰레드 예제1

Ch13 - 10. 싱글 쓰레드와 멀티 쓰레드 예제2

Ch13 - 11. 쓰레드의 I/O블락킹(blocking)

Ch13 - 12. 쓰레드의 I/O블락킹(blocking) 예제1

Ch13 - 13. 쓰레드의 I/O블락킹(blocking) 예제2



Ch13 - 7. main 쓰레드


▶ main 쓰레드란?

▷ main 메서드의 코드를 수행하는 쓰레드


▶ main 쓰레드의 2가지 종류

▷ 사용자 쓰레드
  • main 메서드에서 코드를 수행
▷ 데몬 쓰레드
  • 사용자 쓰레드의 보조 쓰레드
▷ 실행 중인 사용자 쓰레드가 하나도 없을 때 프로그램은 종료




Ch13 - 8. 싱글 쓰레드와 멀티 쓰레드


▶ 싱글 쓰레드

▷ 순차적 진행


▶ 멀티 쓰레드

▷ OS 스케쥴러의 알고리즘에 따라 쓰레드의 시간과 실행 순서 변동
▷ OS는 특정 프로그램만 신경쓸 수 없음
▷ A와 B를 번갈아 가며 실행
▷ A에서 B로 바뀌는 것 : Context Swiching
  • 이 때 시간이 좀 걸림


▷ 시간이 걸려도 채팅하면서 파일 전송이 가능함 즉, 멀티 기능이 가능


Ch13 - 9. 싱글 쓰레드와 멀티 쓰레드 예제1


▶ 멀티 쓰레드

▷ 실행 할 때마다 console 결과가 다름
▷ OS 스케쥴러 때문
class Ex13_3 {
	static long startTime = 0;

	public static void main(String args[]) {
		ThreadEx3_1 th1 = new ThreadEx3_1();
		th1.start();
		startTime = System.currentTimeMillis();

		for(int i=0; i < 300; i++)
			System.out.printf("%s", new String("-"));	

		System.out.print("소요시간1:" + (System.currentTimeMillis() - Ex13_3.startTime));
	} 
}

class ThreadEx3_1 extends Thread {
public void run() {
for(int i=0; i < 300; i++)
System.out.printf("%s", new String("|"));

		System.out.print("소요시간2:" + (System.currentTimeMillis() - Ex13_3.startTime));
	}
}
  • 실행1
      // console
      ||||||||||||||||||||||||||||||-------------------------------|||||||||||||||||||||||||||||||||||||||||
      ---------------------||-----------------------------------------------------------------||||||||||||||
      ||||||||||||||||||||||||||||||||||||||||||||------||||||||||||||||||||||||||||||||||||||||||||||||||||
      |||||||||||||||||||||---------------------------------------------------------------------------------
      -------------------------------------------------------------||||||||||||||||||||||||||||||||||||||||||
      -----------------------------------소요시간1:74||||||||||||||||||||||||||||||||||||||||||||||||||||||소요시간2:76
    
  • 실행2
      // console
      --|||||||||||||--||||||||||||||||||||||||||||||||||||||--||----||||||||||||||||||||----------||||||||||||||
      ||||||||||--------||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||-----
      ------------------------------------------------------------------------------||||||||||||||||||||||||||||||
      |||||||||||||||||||||||||||||||||||||||-----||||||||||||||||||||||||||||||||||||||||||||||||||-------------
      -----------------------------------------------------------소요시간2:66---------------------------------------
      -------------------------------------------------------------------------소요시간1:71
    
  • 실행3
      // console
      ---------------------------------------------------------------------------------------------------------------
      |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--------------
      ---------------------------------------------------------------------------------------------|||||||||||||||||||
      ||||||||||||||||||||||||||||||||||||||||||---------------------------------------------------------------------
      -------------||||||||||||||||||||||||||||||소요시간1:69||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
      ||||||||||||||||||||||||||||||||||||||||||||||||||||||소요시간2:74
    


Ch13 - 10. 싱글 쓰레드와 멀티 쓰레드 예제2


▶ 싱글 쓰레드

▷ 순차적 실행


▶ 멀티 쓰레드

▷ OS 스케쥴러에 의해 순서와 시간 결정



Ch13 - 11. 쓰레드의 I/O블락킹(blocking)


▶ I/O블락킹(blocking)이란?

▷ I : Input
▷ O : Output
▷ blocking : 막힘
▷ 입출력 시 막히는 것


Ch13 - 12. 쓰레드의 I/O블락킹(blocking) 예제1


▶ 싱글 쓰레드의 I/O블락킹(blocking)

▷ BLOCKING 시간 동안 아무것도 못함




Ch13 - 13. 쓰레드의 I/O블락킹(blocking) 예제2


▶ 멀티 쓰레드의 I/O블락킹(blocking)

▷ NO BLOCKING



▷ blocking이 없으니 작업 시간 감소