스레드
- 멀티 코어 CPU가 대중화되어 자바는 언어 차원에서 병렬 처리를 지원한다
- 스레드 하나에 CPU의 코어 하나가 할당된다
동기화 처리 임계 영역 : 멀티 스레드 환경에서 단 하나의 스레드만 실행할 수 있는 코드 영역 임계 영역은 곧, 동기화가 적용된 구역이다
- Synchronized
- ReentrantLock
- volatile
- atomic
스레드 풀
- 스레드 생성과 소멸은 그 자체로 시스템에 부담을 주는 일
- 이러한 성능 저하를 피하기 위해 미리 제한된 수의 쓰레드를 생성해두고 이를 재활용하는 스레드 풀을 사용한다
자바가 제공하는 스레드 풀 “ExecutorService”
1
2
- submit 메소드의 인자로 들어가는 구현 객체에 따라 반환값 여부 결정
Runnable, Callable (+Future)
- 작업 종료와 관련된 내용이 많다. 궁금하면 찾아보자
##
- 운영체제에서는 실행중인 하나의 앱을 프로세스라고 부른다
- 사용자가 앱을 실행하면 운영체제로부터 실행에 필요한 메모리를 할당받아 앱의 코드를 실행하는데, 이것이 프로세스다
멀티 프로세스
1
2
3
4
5
6
7
8
9
- 하나의 앱은 멀티 프로세스를 만들기도 한다
- 예를 들어 메모장 앱을 2개 실행했다면 2개의 프로세스가 생성된 것이다
- 운영체제는 두 가지 이상의 작업을 동시에 처리하는
멀티태스킹을 할 수 있도록 CPU 및 메모리 자원을 프로세스마다 적절히
할당해주고, 병렬로 실행시킨다
예를 들어, 워드로 문서 작업을 하면서 메신저도 이용할 수 있다
- 멀티 태스킹이 꼭 멀티 프로세스를 뜻하는 것은 아니다
- 한 프로세스 내에서 멀티 태스킹을 할 수 있도록 만들어진 앱도 있다
대표적인 예로, 미디어 플레이어와 메신저가 있다
- 멀티 프로세스는 자신의 메모리를 가지고 실행하므로 서로 독립적이지만, 멀티 스레드는 하나의 프로세스 내부에 생성되므로 스레드하나가 예외를 발생시키면 다른 스레드도 영향을 받는다
멀티 스레드
1
2
3
4
5
- 하나의 프로세스에서 두 가지 이상의 작업을 처리할 수 있음
- 멀티 스레드로 동작하는 메신저의 경우 파일을 전송하는 스레드에서
예외가 발생하면 메신저 프로세스 자체가 종료되므로
채팅 스레드도 같이 종료된다
그렇기 때문에 멀티 스레드에서는 예외 처리에 만전을 기해야 한다
데몬 스레드
1
2
3
- 스레드의 작업을 돕는 보조 역할을 함
- 예를 들어, 워드프로세서의 자동 저장,
미디어 플레이어의 동영상 및 음악 재생 등이 있다
- 자바의 모든 앱은 메인 스레드가 메인 메소드를 실행하면서 시작한다 이때 메인 스레드는 필요에따라 작업 스레드들을 만들어서 병렬로 코드를 실행할 수 있다
- 즉 멀티 스레드를 생성해서 멀티 태스킹을 수행하는 것이다
- 멀티 스레드 앱에서는 실행중인 스레드가 하나라도 있다면 메인 스레드가 종료되더라도 프로세스가 종료되지 않는다