ABTCEFG♪ 안녕하세요, 여러분!
BTC_주먹쥐고 일어서입니다.
클라우드 공부나 네트워크 공부를 하면서 지겹게 듣는 프로세스와 프로세서, 프로그램
여러분들은 정확하게 그 차이를 인지하고 계시나요?
모른다면 제가 주먹쥐고 알려드립니다 뿅!
Program vs Process vs Thread
Program
정적으로 존재하는 실행할 수 있는 파일 (Disk에 존재)
Process (독립적인 개체)
운영체제로부터 시스템 자원을 할당받는 작업의 단위 (Memory에 존재)
실행중인 프로그램의 인스턴스 = 프로세스
특징
- 프로세스는 각각 독립된 메모리 영역 (code, data, stack, heap)을 할당 받음
- 기본적으로 프로세스당 최소 1개의 스레드 가짐
- 각 프로세스는 별도의 주소공간에서 실행
- 프로세스는 다른 프로세스의 변수나 자료구조에 접근 X
- 다른 프로세스의 자원에 접근하려면 프로세스간 통신 이용해야함 (ex IPC, 파이프, 파일, 소켓 등을 이용한 통신 방법)
Thread
- 스레드는 프로세스와 달리 stack부분을 제외한 code, data, heap 메모리 영역 공유
- 스레드는 프로세스 내의 주소공간이나 자원들(heap)을 스레드 끼리 공유
- 한 스레드가 프로세스 자원을 변경하면 다른 스레드도 변경결과 즉시 확인 가능
멀티 프로세스 vs 멀티 스레드
멀티 프로세스 (Multi process)
하나의 응용 프로그램을 여러개의 프로세스로 구성하여 각 프로세스가 하나의 작업(테스크)을 처리하도록 하는 것
- 장점
- 여러개의 자식 프로세스 중 하나에 문제가 발생하면 자식 프로세스만 죽는 것으로 다른 프로세스에 영향X
(→프로세스끼리 공유X)
- 단점
- context switching에서의 오버헤드 발생
- 프로세스 간 변수 공유 어려움
멀티 스레드 (Multi thread)
하나의 응용프로그램을 여러개의 스레드로 구성하고 각 스레드로 하나의 작업을 처리하도록 하는 것
- 윈도우, 리눅스 등 많은 운영체제들이 멀티 스레딩을 기본으로 하고 있다.
- 웹서버는 대표적인 멀티 스레드 응용 프로그램
- 장점
- 시스템 자원 소모 감소(자원의 효율성 증대)
프로세스를 생성하여 자원을 할당하는 시스템콜이 줄어들어 자원을 효율적으로 관리 가능
- 시스템 처리량 증가( 처리비용 감소)
스레드 간 데이터를 주고 받는 것이 간단해지고 자원 소모가 줄어듬
스레드 사이의 작업량이 작아 context switching이 빠름
- 프로그램 응답시간 단축
스레드는 프로세스 내의 stack 영역을 제외한 모든 메모리를 공유하기 때문에 통신의 부담이 적음
- 단점
- 주의 깊은 설계가 필요
- 디버깅이 까다로움
- 단일 프로세스 시스템의 경우 효과를 기대하기 어려움
- 다른 프로세스에서 스레드를 제어할 수 없음 (즉, 프로세스 밖에서 스레드 각각을 제어할 수 없다.
- 멀티 스레드의 경우 자원 공유의 문제가 발생 (동기화 문제)
- 하나의 스레드에 문제가 발생하면 전체 프로세스가 영향 받음
멀티 프로세스 대신 멀티 스레드를 사용하는 이유
자원의 효율성 증대
- 멀티 프로세스로 실행되는 작업을 멀티 스레드로 실행할 경우,
프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄어들어 자원을 효율적으로 관리 가능
- 스레드는 프로세스 내의 메모리를 공유하기 때문에 스레드 간 데이터를 주고 받는 것이 간단해지고 시스템 자원 소모가 줄어듬
처리비용 감소 및 응답시간 단축
- 스레드 간의 통신 비용이 적어 작업들 간의 통신 부담이 줄어듬(스레드 메모리 공유)
- 프로세스간 전환 속도보다 스레드간의 전환 속도가 더 빠름 (context switching시 스레드는 Stack 영역만 처리하기 때문)
* 동기화 문제 주의
스레드 간의 자원공유는 전역 변수(데이터 세그먼트)를 이용하므로 함께 상용할 때 충돌이 발생할 수 있음
'INFRA' 카테고리의 다른 글
[Docker] Docker Buildx 란? (0) | 2023.05.25 |
---|---|
[Docker] Dockerfile 작성법 (1) | 2023.05.12 |
Gitlab에대해 (1) | 2022.09.27 |
무정지를 위한 인프라 (2) 웹서버 이중화 (0) | 2022.06.15 |
프로세스 상태 전이도 (0) | 2022.05.26 |
댓글