main 쓰레드
: main 메서드의 코드를 수행하는 쓰레드
: 쓰레드는 '사용자 쓰레드'(main)와 '데몬 쓰레드'(보조) 두 종류가 있다.
- 실행중인 사용자 쓰레드가 하나도 없을 때 프로그램은 종료된다.
- Call stack(호출스택)에 main, run 쓰레드 2개가 있을 때,
main 쓰레드가 실행을 종료해도 run 쓰레드는 남아있으면 프로그램은 종료되지 않음.
- join은 다른 쓰레드가 끝날 때 까지 main메서드가 종료되지 않도록 하는 메서드
싱글쓰레드와 멀티쓰레드
- 멀티쓰레드의 작업시간은 OS스케줄러가 정함. 저 그림도 완벽한건 아니지만 저런식으로 구성된다.
- 멀티쓰레드에서 a->b 로 넘어가는 것을
context switching
이라고 함(문맥전환)
- 넘어갈 때 시간이 소요됨. 동시에 두 작업이 번갈아서 실행되지만, 한 작업을 쭉 진행하는 것 보단 시간이 더 걸린다.
- 시간이 더 걸리더라고 두가지 작업을 동시에 할 수 있다는게 (채팅하면서 파일 다운로드 받기) 이득이 너무 큼.
- 작업을 효율적으로 할 수 있다. -> i/o블락킹과 연관
쓰레드의 I/O 블락킹 (blocking)
: 입출력시 작업 중단
- 싱글쓰레드에서는 입출력을 받는동안 일을 하지 못하지만, 멀티쓰레드에서는 그 시간동안 다른 쓰레드를 진행할 수 있다.
-> 이 경우에는 멀티쓰레드가 작업을 더 일찍 끝낼 수 있음!