티스토리 뷰

Process vs Threads

Process : 실행 중인 프로그램 하나를 OS 관점에서 다룰 때 "프로세스"

실행의 단위 (자신만의 실행상태를 가진다, CPU가 프로세스를 실행할 때 ), 시스템 자원의 집합, 자원소유단위

지금까지는 하나의 프로세스가 하나의 실행 흐름만 가진다고 가정했지만,

하나의 프로세스 내에 여러 실행흐름을 가질 수 있어서 그것을 Thread라고 한다.

 

Multithreading

한 프로세스 내에서 여러 실행흐름(thread)를 동시에 실행하는 기능, 여러작업 동시에 하는거

main thread: 프로세스가 처음 시작될 때 생성되는 최초의 스레드 , peer thread: 메인 스레드가 생성하는 추가 스레드들

같은 프로세스의 thread들은 같은 자원을 가지지만, 각자 독립적인 실행흐름 (stack)을 가진다.

 

지원방식의 진화

 

Concurrency & Parallelism

Concurrency (동시성)

두 개 이상의 프로세스(또는 스레드)가 시간적으로 겹치거나(interleave), 동시에 실행(overlap)될 때 concurrent(동시 실행)이라고 한다. 반대로, 한 번에 하나씩 순차적으로 실행되면 sequential (순차 실행) 이다.

스레드/작업이 동시에 진행 중인 것처럼 보이는 상태, 독립적으로 실행을 진행(make progress), 반드시 동시에 실행되는건 아님.

Concurrent (동시성 있는 경우) : A & B, A & C Sequential (순차 실행) : B & C

 

Parallelism (병렬성) 

여러 코어/프로세서에서 스레드가 물리적으로 동시에 실행되는 것, 진짜 동시에 실행된다.

데이터 병렬성 : 하나의 데이터를 여러 조각으로 나누고, 여러 코어에서 동일한연산을 하는 방식 (데이터만 나눔, 작업은 동일)

 

작업 병렬성 : 하나의 데이터에 대해, 서로다른 연산을 여러코어에 분산시켜 하는 방식 (데이터는 같아도, 작업은 다름)

 

동시성의 정도, 병렬성의 정도

동시성의 정도 : 진행중이거나(running, ready )동시에 진행 중일  수 있는 쓰레드 수 

병렬성의 정도 : 물리적으로 동시에 진행 중인 쓰레드 수(실행 중인 수, CPU개수)

 

Benefits

1. Faster response

프로그램 일부가 차단되거나 오래 걸리는 작업을 수행 중일 때도, 나머지 부분은 계속 실행될 수 있음.

결과적으로 전체응답시간이 개선됨 >> 사용자입장에선 프로그램이 느려지지않고 빠르게 반응하는 것처럼 느껴짐.

RPC : 한 프로그램이 다른 시스템의 함수/프로시저를 마치 자신의 것처럼 호출하는 기술

 

✔ 멀티스레딩을 쓰면 시간이 오래 걸리는 작업 때문에 전체 프로그램이 멈추는 것을 막을 수 있음
✔ 이는 특히 I/O 대기, 서버 응답 대기가 많은 프로그램에서 큰 장점
✔ 예: 웹 서버, 데이터베이스, 분산 시스템, 네트워크 프로그래밍 등

 

2.Creation / Communication cost

-1) 시간자원절약

멀티프로세싱:  PCB (Process Control Block) 전체를 만들어야 함 → 무겁고 느림, fork() 시스템 호출로 자식 프로세스를 생성 → 비용 큼

멀티스레딩: TCB (Thread Control Block)만 만들면 됨 → 훨씬 가볍고 빠름, 스레드는 같은 프로세스 안에서 생성되므로 context switch 비용도 낮음

✅ 그래서 스레드는 생성/전환 속도가 더 빠름

 

-2) 자원절약

멀티프로세싱 : 프로세스 간에는 메모리를 공유하지 않음, 커널이 개입해야 하고, 프로그래머가 직접 구현해야 함

멀티프로그래밍 : 모든 스레드는 같은 프로세스 내의 메모리 공간을 공유 → 글로벌 변수, 힙, 파일 디스크립터 등 공유 가능, 공유데이터의 동기화문제를 조심해야함.

 

3. Parallel Processing

멀티코어 CPU구조에서의 확장성

병렬처리 : 하나의 프로세스가 여러 쓰레드로 나뉘고, 이 쓰레드들이 여러 CPU에서 동시에 실행되는 것

전체처리속도대폭향상, 같은 어플리케이션이 여러코어에서 동시에 실행됨.

✔ 멀티스레딩은 병렬성을 통해 CPU 활용도를 극대화
✔ 특히 멀티코어 환경에서 성능이 획기적으로 개선
✔ 그래서 요즘 대부분의 고성능 시스템은 멀티스레드 + 멀티코어 구조로 설계됨

 

멀티코어를 사용하면 멀티쓰레드에서 얼마나 빨라질수 있을까?

Amdahl’s Law :

병렬 처리의 한계를 설명하는 법칙으로, 전체 프로그램 중 병렬화 불가능한 부분(S)이 존재할 경우,
얼마나 많은 프로세서를 사용해도 속도 향상은 제한된다는 이론

오른쪽그래프 0%직렬 : 거의 완벽한 병렬 ->속도 가장 큼

 

성능이 다시 떨어지는 이유

1. Context Switching 비용 증가
→ 스레드가 너무 많으면 CPU가 번갈아가며 처리하느라 오히려 비효율

2. 동기화/경쟁 조건(lock, barrier 등)
→ 스레드 간 데이터 공유/경쟁이 발생하면 병목 생김

3. CPU 수보다 많은 스레드
→ 16개의 프로세서에 20~24개의 스레드를 돌리면 오버헤드 발생

 

 

Multithreaded Process Model

각각의 쓰레드는 자신만의 스택 공간이 필요하다.

스택이 쓰레드마다 필요한 이유:

스택은 지역 변수, 함수 호출 정보, 리턴 주소 등을 담기 때문에, 여러 스레드가 하나의 스택을 공유하면 충돌, 오동작 발생

TCP : 각 스레드마다 고유한 실행 정보를 저장하는 제어 구조체

 

✔ 하나의 프로세스(주소 공간) 안에서 스레드들은 자원(pcb, address space)을 공유하지만 실행 상태는 독립적이어야 함.

 

프로세스 생성 (fork() \ wo COW):

완전히 새로운 프로세스를 복사해서 생성, 스택, 힙, 데이터, 코드, PCB까지 전부 새로 생성됨, 비용이 매우 크다.

쓰레드 생성 (pthread_create()):

기존 프로세스 안에서 새로운 쓰레드만 생성, PCB,힙,코드,데이터는 공유, 스택과 TCB만 따로 생성.

 

 

 

Implementation of Threads

 

     - User Level Thread

유저가 관리. 커널은 스레드의 존재를 모르고 하나의 프로세스로 인식한다.

장점 : 문맥전환 빠름 (커널 개입이 없어서) 

단점 : 한 프로세스가 블로킹(중단)되면 전체 프로세스가 중단된다.병렬성불가능 

     - Kernel Level Thread

커널이 관리. 개별적으로 실행

장점 : 하나의 스레드가 중단되어도 다른 쓰레드는 계속 실행, 병렬성, cPU활용도 향상 

단점 : 커널 개입 필요, 오버해드(모드전환을 필요로함) 큼, 성능저하

     - Combined

여러 사용자 스레드를 하나 또는 여러 커널 스레드에 매핑,

커널 수준에서 블로킹이 발생해도 다른 KLT에서 다른 ULT 실행 가능

 

Thread API

Thread Synchronization

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2026/01   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함