프로세스 : cpu가 읽어서 실행중인 프로그램
CPU = 사장님
프로세스 = 공장
스레드 = 인부 -> 많을수록 효율적, 각 스레드는 독립 공간을 가진다.
스레드 = 하나의 코드 블록. 코드 묶음
프로세스 개수 < 스레드 개수 : 많을수밖에 없다.
멀티 프로세스, 싱글 스레드 < 싱글 프로세스, 멀티 스레드
: 속도가 빠르고, 스레드끼리 소통이 가능하다 = 자원 공유가 가능하다. -> 한번에 관리 가능.
멀티 스레드
- 속도가 빠르고 한번에 관리 가능하다.
- 일이 꼬일 수 있다.
- 설계를 철저히 해야한다.
멀티 프로세스
- 품이 많이 든다.
- 에러 발생 가능성 적다.
- 1
: 스레드는 생성용, 러너블은 구현용
- o
- 멀티 스레드
: 애플리케이션 = 프로그램 -> 실행: 프로세스
- run()
: 실행공간. main에서 start 메서드를 이용하여 실행한다.
스레드는 종료했으나 실행되는 동안 버퍼에 쌓인 자료들은 살아있다.
run 대신 interrupt 사용
: 정리하고 끈다.
yield: 실행 대기상태이므로, 언젠가 대기 풀어줘야 한다.
c2 실행 > c1 실행
일반적으로 메인스레드가 종료되어도, 작업중이던 다른 스레드는 계속 실행된나, 데몬 스레드는 모두 종료.
다른 스레드의 접근 및 이용을 막는다.
진입 시 락을 걸고, 벗어날 때 잠금 해제하지 않으면, 그 뒤로 아무도 못쓴다...
- 4
: 멀티스레드는 부하 위험이 잇으므로, 스레드 개수에 제한을 둔다. -> Pool(제한구역)
- 데몬스레드
- 동기화
- Object
웹서버 접속 -> 클라이언트 요청 한번에 처리
자바의 main -> 자바스프링의 controller
빅데이터&인공지능 : 대용량의 데이터를 분석하고 병렬처리
게임 개발 : 그래픽, 사운드, 중력과 같은 물리엔진 병렬처리
금융 계열 : 주식, 계좌이체, 실시간 모니터링
※chap14