멀티태스킹
멀티태스킹: 하나의 CPU가 여러가지 작업을 번갈아 처리.
하나의 응용프로그램이 여러 개의 태스크를 동시에 처리
1) 멀티프로세스
- 여러 CPU/CPU코어를 이용해 여러 프로세스를 동시에 실행
- 프로세스: OS에서 관리하는 실행단위
- 프로세스간 메모리 공유x
- 안정성 높음
- 웹 브라우저가 탭마다 별도의 프로세스를 띄움
2) 멀티쓰레드
- 하나의 프로세스 내에서 여러 미니 프로세스들 동시 수행
- 쓰레드: 프로세스 내에서 메모리 공유하는 단위(각각의 작업)
- 경량성(프로세스보다 생성/소멸 비용이 낮음)
- 각 쓰레드는 메모리를 공유하여 독립적으로 동작하여 빠른 응답에 최적
- 동시에 접근하면서 동기화 문제 발생O
- 자바의 기본 멀티쓰레드: 최소 하나의 메인 쓰레드를 가지고 시작
- 멀티 쓰레드 구현 전에 몇 개의 작업을 병렬로 실행할 건지 결정해야함
-> Runnable 인터페이스 사용하면 고수준의 쓰레드 관리 API 사용O
3) 자바의 메인 쓰레드
- 모든 자바 프로그램은 메인 쓰레드가 main()메소드 실행하며 시작
- 실행 종료 조건: 마지막 코드를 만날 때, Return 문 만날 때
- Main 쓰레드는 작업 쓰레드를 만들어 병렬로 코드 실행 -> 멀티 태스킹
- 프로세스 종료:
싱글 쓰레드 - 메인 쓰레드가 종료하면 프로세스도 종료
멀티 쓰레드 - 실행 중인 쓰레드 있으면 미종료
4) 동시성과 병렬성
(1) 동시성
- 하나의 CPU가 작업을 쪼개 번갈아 실행 -> 독립적으로 돌아가는 것'처럼' 보임
- 쓰레드1 -> 쓰레드2 -> 쓰레드1 -> 쓰레드2
(2) 병렬성
- 여러 CPU가 실제로 동시에 각각의 작업 실행
- 쓰레드1+쓰레드2
- 코어 수<쓰레드 수 -> 스케쥴링 필요
쓰레드 생성과 실행
1) 주요 메소드
- void start()
- void run()
- static void sleep()
- void interrupt(): 중단 알림
- void join(): 다른 쓰레드가 종료될 때까지 현재 쓰레드 대기. 시간지정 가능

2) 쓰레드 상태
(1) 생성 상태
- 쓰레드 클래스를 이용해 새로운 쓰레드 객체 생성
- start()로 생성된 쓰레드 시작
(2) 실행 가능 상태
- 쓰레드가 스케줄링 큐에 넣어지고 스케줄러에 의해 우선순위에 따라 실행
(3) 실행 가능 상태 -> 실행 중지 상태
- wait(), sleep(), 입출력 작업을 위해 대기하는 경우
