프로세스 vs 스레드
1. 프로세스
프로세서에 의해 실행되는 프로그램
- disk의 프로그램을 실행하면 ram에 프로세스로 올라간다.
- 프로세스 내에 스레드가 실행된다.
- 모든 프로세스는 하나 이상의 스레드를 가진다.
- jvm은 단일 프로세스가 실행된다.
- 구조: Code, Data, Heap, Stack
2. 스레드
- 프로세스와 같이 실행환경을 제공한다.
- 프로세스를 새로 만드는 것보다 스레드는 새로 만드는 것이 적은 리소스
- 프로세스의 리소스를 공유한다.
멀티 Tasking
- CPU(프로세서)는 한 순간에 하나의 프로세스만 실행
- OS가 짧은 시간에 실행하는 프로세스를 교체하기에 동시에 하고 있다고 느끼는 것(Context Switching)
Context Swiching
- 현재 진행하고 있는 Task(Process, Thread)의 상태를 저장하고 다음 진행할 Task의 상태 값을 읽는 과정
- PCB를 통해 Task의 정보를 읽음 (Process Control Block)
멀티 프로세스 vs 멀티 스레드
- 멀티 프로세스
- 같은 프로그램이라면 같은 데이터(Code, Data, Heap)을 다시 CPU에 적재해야 함
- IPC(inter Process Communication), Context Switching 속도가 느림
- 멀티 스레드
- 같은 데이터를 다시 CPU에 올려도 되지 않기 때문에 Context Swiching 비용이 적음
- 스레드가 동시에 같은 데이터에 접근할 경우 문제가 발생할 수 있음
병렬 처리 종류
- 하이퍼 스레딩: 코어 하나에 파이프라인을 두개로 쪼개어 병렬적으로 수행
- 멀티 코어: 하나의 CPU에 코어가 여러개
- 멀티 CPU: 성능 좋지만 가격이 비쌈
멀티 코어
코어 : CPU에서 작업을 수행하는 주체(파이프라인에 들어온 명령어를 수행해주는 주체)
- 프로세스 작업을 동시에 수행
스레드 풀(Thread Pool)이란?
스레드를 미리 생성해두고 사용한다.
- 매번 생성 및 수거 요청이 올 때마다 스레드를 생성하고 수거하지 않는다
- 작업큐에 들어온 Task를 Tread에 할당한다.
스레드 풀을 사용할 때 장단점을 알아보자
장점
- 성능 저하 방지 : 스레드를 새로 생성하거나 수거하면 성능이 저하될 수 있다.
- 다수의 요청을 처리하는데 유리: 속도가 빨라지기 때문
단점
- 스레드를 너무 만들어 놓으면 메모리 낭비만 발생한다.
- 놀고있는 스레드가 발생할 수 있다.
자바에서의 Thread Pool
스레드 풀 구현체를 만들어서 사용할 수 있도록 다음을 제공한다.
- ExecutorService : 인터페이스
- Executors : 클래스
댓글