✅Summary
쓰레드
: 프로세스 내에서 실행되는 실행 단위
쓰레드 풀
: 쓰레드를 미리 생성해두어 작업처리에 사용되는 쓰레드를 제한된 개수만큼 정해놓고 작업 큐에 들어오는 작업들을 하나씩 쓰레드가 맡아 처리하는 기법 ex) 치킨집에서 직원이 필요할때마다 구인하는 것이 아니라 뽑아놓고 일을 분담
쓰레드 풀의 장/단점
장점: 쓰레드를 생성/수거하는데 비용이 들지 않으므로 시스템 자원을 줄일 수 있다.
단점: 쓰레드를 너무 많이 생성해 두었다가 사용하지 않으면 메모리 낭비가 발생 ex) 직원이 많으면 월급만 나가니까
✅프로세스와 쓰레드의 차이
👉프로세스
: 상가 건물을 컴퓨터라고 한다면 치킨집은 프로세스
: ex) 상가안의 식당들은 배정된 자신의 공간과 돈이 있다. 즉 컴퓨터 안에 각 프로세스가 존재
: 자신만의 고유 공간과 자원을 할당받아서 사용 - 최소 하나의 쓰레드를 보유하고 있다 (code, heap, stack)
: 프로세스마다 독립된 메모리 영역을 code/data/stack/heap의 형식으로 할당 받기 때문에 다른 프로세스의 변수나 자료에 접근할 수 없다.
: 아래 그림에서 여러 프로세스가 동시에 실행되는 것이 아니라 빠르게 프로세스들을 번갈아가면서 실행하고 관리
👉쓰레드
: 다른 쓰레드와 공간과 자원을 공유하면서 사용 - 프로세스 안에서 작업을 처리한다. 프로세스 자원중 stack만 따로 할당 받고 나머지 영역은 쓰레드끼리 서로 공유
: 각각의 쓰레드는 별도의 stack을 가지고 있지만 힙 메모리는 서로 읽고 쓸 수 있다.
: ex) 치킨집에서 각자 일하는 공간이 있지만 같이 보는 업무 가이드(code)가 있고, 주문도 같이 받고(data), 손님이 오가는 홀 공간도 같이 쓴다(heap, 동적으로 할당된 데이터를 저장)
✅멀티프로세스와 멀티쓰레드
👉멀티프로세스
: 하나의 운영체제 안에서 여러 프로세스가 실행되는 것
👉멀티쓰레드
: 하나의 프로세스가 여러 작업을 여러 쓰레드를 사용해 동시에 처리하는 것
✅쓰레드풀? 장/단점?
👉쓰레드풀
: 컴퓨터 프로그램에서 실행의 동시성을 달성하기 위한 소프트웨어 디자인 패턴이다.
: 여러 쓰레드를 동시에 만들어 실행(병렬처리)할 수 있다
: 초기화 -> 작업수신 -> 작업수행 -> 작업처리 -> 작업완료 및 반환 -> 작업대기 -> 종료 의 동작과정
👉쓰레드풀을 사용하는 이유
1️⃣프로그램 성능 저하 방지
- 매번 발생하는 작업을 병렬처리하기 위해 쓰레드를 생성/수거하는 데 따른 부담은 프로그램 전체적인 퍼포먼스를 저하시킨다.
- 쓰레드 또한 프로세스가 할당한 메모리를 사용한다
- 즉 Java의 경우 쓰레드를 생성하면 JVM 메모리를 소비하게 되는 것, 쓰레드 자체도 레지스터와 스택을 가지고 context switching 이 일어나기 때문에 쓰레드 생성에 따른 메모리 할당을 무시할 수 없음
2️⃣다수의 사용자 요청을 처리
- 대규모 프로젝트에서 특히 중요, 다수의 사용자의 요청을 수용하고 빠르게 처리하고 대응하기 위함
- 특히 Bottle neck 현상이 발생하는 I/O작업과 DB작업에서 주로 사용된다
👉쓰레드풀의 장/단점
장점
- 쓰레드를 생성/수거하는데 비용이 들지 않음
- 쓰레드가 생성될 때 OS가 메모리 공간을 확보해주고 메모리를 쓰레드에게 할당해줌
- 생성비용은 들지만 이전의 쓰레드를 재사용할 수 있으므로 시스템 자원을 줄일 수 있다.
- 대기중인 상태의 쓰레드로 작업을 하므로 작업실행에 딜레이가 발생하지 않음
단점
- 쓰레드를 너무 많이 생성해두었다가 사용하지 않으면 메모리 낭비가 발생
- 쓰레드풀의 단점 개선: Fork Join Thread Pool
✅동시성(Concurrency)와 병렬성(Parallelism)
👉동시성(Concurrency) - 실제로 동시에 일어나는게 아님을 인지!!
싱글코어에서 멀티스레드를 동작 시키기 위한 방식으로 멀티 태스킹을 위해 여러개의 스레드가 번갈아가면서 실행되는 성질 - 각 스레드들이 병렬적으로 실행되는 것 처럼 보이지만 사실은 번갈아 가면서 실행되고 있는 것
: 주로 단일 처리기(싱글 프로세서) 시스템에서 사용되며, 작업간의 우선순위, 스케쥴링, 작업 전환 등을 관리하기 위해 스레드, 이벤트 루프, 콜백 등의 기술을 활용한다
: 작업의 독립성과 상호 의존성을 관리하고 작업간의 효율적인 자원 공유와 작업 진행을 조율하는 것에 중점
👉병렬성(Parallelism)
멀티코어에서 멀티스레드를 동작시키는 방식으로 한개 이상의 스레드를 포함한 각 코어들이 동시에 실행되는 성질 - 데이터 병렬성, 작업 병렬성으로 구분된다.
: 주로 다중 처리기(멀티프로세서 또는 멀티코어) 시스템에서 사용됌
: 대규모연산, 데이터처리, 계산 집약적인 작업 등에서 유용
'필수 개발지식 > CS' 카테고리의 다른 글
[CS]백엔드에서 자주 쓰이는 자료구조와 알고리즘 (0) | 2023.07.24 |
---|---|
[CS] Database에서 정규화(Normalization)란? (0) | 2023.07.05 |
[CS] DB INDEXING (0) | 2023.06.21 |
[CS] 프로세스 생명주기와 프로세스 메모리 (0) | 2023.06.17 |
[CS 지식] CPU와 메모리, 스케쥴링, 메모리, 자료구조 (0) | 2023.06.15 |