Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 해쉬
- 파이썬 기초부터 시작하는 딥러닝 영상인식 바이블 Online 강의
- 패스트캠퍼스후기
- 백준 9019
- 그리디
- 백준
- 문자열
- 백준 23289
- 백준 3차원 막대기 연결하기
- Python
- 직장인자기계발
- 직장인인간
- 삼성
- 온풍기 안녕!
- 딥러닝 바이블 후기
- 패스트캠퍼스
- 스택
- 최단거리
- 백준 19950
- 삼성 코테
- MST
- 파이썬 기초부터 시작하는 딥러닝 영상인식 바이블 Online 강의 후기
- 백트래킹
- 프로그래머스
- 파이썬
- 직장인인강
- 백준 학교 탐방하기
- 패캠챌린지
- 코딩테스트
- 코테
Archives
- Today
- Total
programmingu
프로세스 vs 스레드 (+ 멀티프로세스, 멀티스레드) 본문
프로세스
cf) 프로그램
- 어떤 작업을 실행할 수 있는 파일
- 파일이 저장장치에 저장되어 있지만 메모리에는 올라가 있지 않은 정적인 상태 ⇒ 즉 사용자가 눌러서 실행하기 전의 파일. 코드 덩어리
프로세스 정의
- 프로그램을 실행하는 순간 파일은 컴퓨터 메모리에 올라가게 되고(⇒ 동적인 상태). 이 실행중인 프로그램을 프로세스라고 한다.
- 운영체제로부터 시스템 자원을 할당받는 작업의 단위
프로그램 → 프로세스
- 운영체제는 프로그램을 실행하기 위해 프로그램을 메모리의 적당한 위치로 가져온다. 그리고, 운영체제는 프로세스를 관리하기 위해 PCB(Process Control Block)를 생성한다.
- 프로세스 생애주기
- 생성 상태 : 프로그램을 메모리에 가져와 실행 준비가 완료된 상태, PCB가 생성된다.
- 준비 상태 : 실행을 기다리는 모든 프로세스가 자기 차례를 기다리는 상태
- 실행 상태 : 선택된 프로세스가 CPU를 사용하는 상태
- 대기 상태 : 실행 상태에 있는 프로세스가 입출력을 요청하면 입출력이 완료될 때 까지 기다리는 상태
- 완료 상태 : 프로세스가 종료된 상태, PCB가 삭제된다.
프로세스의 구조
- 위에서 운영체제로부터 시스템 자원을 할당받는 작업의 단위가 프로세스라고 했다.
- 시스템 자원의 예: CPU 시간, 운영되기 위해 필요한 주소 공간, Code, Data, Static Heap의 구조로 되어 있는 독립된 메모리 영역
- 프로세스는 각각 별도의 독립된 주소공간 할당 . 독립된 메모리 영역 할당. ⇒ 만약 한 프로세스를 실행하다가 오류가 발생해서 프로세스가 강제로 종료된다면, 공유하고 있는 파일을 손상시키는 경우가 아니라면 아무런 영향을 주지 않는다.
- Code(text) : 코드 자체를 구성하는 메모리 영역(프로그램 명령) 정적영역
- Data : 전역변수, 정적변수, 배열 등 정적 영역
- 초기화 된 데이터는 data 영역에 저장
- 초기화 되지 않은 데이터는 bss(Block Stated Symbol) 영역에 저장
- Heap : 동적 할당 시 사용 (new(), malloc() 등) 동적영역
- Stack : 지역변수, 매개변수, 리턴 값 (임시 메모리 영역) 동적 영역
스레드
스레드의 정의
- 프로세스가 할당받은 자원을 이용하는 실행의 단위.
- 스레드는 프로세스의 코드에 정의된 절차에 따라 CPU에 작업 요청을 한다.
- 프로세스는 단순한 껍데기일 뿐, 실제 작업은 스레드가 담당한다. 프로세스 생성 시 하나의 주 스레드가 생성되어 대부분의 작업을 처리하고 주 스레드가 종료되면 프로세스도 종료된다.
- 스레드는 프로세스마다 최소 1개(메인 스레드 포함). 여러 개 생길 수 있다.
- 스레드는 프로세스 내에서 각각 Stack만 따로 할당받고 Code, Data, Heap 영역은 공유한다. ⇒ 어떤 스레드 하나에서 오류가 발생한다면 같은 프로세스 내의 다른 스레드 모두가 강제로 종료된다. (코딩할 때 어떤 함수에서 오류 발생하면 프로세스 실행 끝내버림)
멀티프로세스
하나의 컴퓨터에 여러 CPU 장착 → 하나 이상의 프로세스들을 동시에 처리(병렬)
- 두개 이상 다수의 프로세서(CPU)가 협력적으로 하나 이상의 작업(Task)을 동시에 처리하는 것이다. (병렬처리)
- 프로세스 간에 Code, Data, Heap, Stack 영역 모두 서로 공유하지 않는다.
장점
- 독립된 구조로 안전성 (메모리 침범 문제를 OS 차원에서 해결)
- 프로세스 중 하나에 문제가 생겨도 다른 프로세스에 영향을 주지 않아, 작업속도가 느려지는 손해정도는 생기지만 정지되거나 하는 문제는 발생하지 않는다. 동작은 함
단점
- 각각 독립된 메모리 영역을 갖고 있어, 작업량 많을 수록 오버헤드 발생.
- Context Switching으로 인한 성능 저하
멀티 스레드
하나의 응용 프로그램에서 여러 스레드를 구성해 각 스레드가 하나의 작업을 처리하는 것
- 스레드들이 공유 메모리를 통해 다수의 작업을 동시에 처리하도록 해줌
장점
- Context-switching할 때 공유하고 있는 메모리만큼 메모리 자원을 아낄 수 있다.
- 프로세스의 Stack영역을 제외한 모든 메모리를 공유하기 때문에 통신 부담이 적어 응답 시간이 빠르다.
단점
- 스레드 하나가 프로세스 내 자원을 망쳐버린다면 모든 프로세스가 종료될 수 있다.(안정성 낮음)
- 자원을 공유하기 때문에 필연적으로 동기화 문제가 발생할 수밖에 없다. (병목현상, 데드락)
- 디버깅이 어렵다.
- 하나의 스레드에 문제가 생기면 전체 프로세스가 영향을 받는다.
종류 장점 단점
멀티 프로세스 | 하나의 프로세스가 죽어도 다른 프로세스에게는 영향을 끼치지 않는다. | 각각 독립된 메모리 영역을 갖고 있어 작업량이 많을 수록 오버헤드가 발생하고 Context Switching으로 인한 성능 저하를 유발한다. |
멀티 스레드 | 프로세스의 응답시간이 단축되고 시스템의 처리율이 향상된다. 또한 코드영역과 데이터 영역을 공유하기 떄문에 자원 소모가 적다. | 프로그램 디버깅이 어렵고 하나의 스레드에 문제가 생기면 전체적인 프로세스에 영향을 끼치게 된다. |
추가
멀티 프로그래밍
- 프로세서가 입출력 작업의 종료를 대기할 동안 하나의 프로세서에서 다른 프로그램을 수행할 수 있도록 하는 것 ( cpu 하나당 1개의 프로세스 처리함)
멀티 태스킹 (Multi-taking)
- 멀티 태스킹은 task를 OS의 스케쥴링에 의해 여러개의 task를 번갈아가며 수행하는 것을 의미한다.
⇒ 멀티 프로그래밍은 프로세서의 자원낭비를 막기 위함이고, 멀티태스킹은 정해진 시간동안 각각의 task를 번갈아가며 수행하는 것을 의미한다.
Context Switching이란?
- 프로세스의 상태 정보를 저장하고 복원하는 일련의 과정
- 즉, 동작 중인 프로세스가 대기하면서 해당 프로세스의 상태를 보관하고, 대기하고 있던 다음 순번의 프로세스가 동작하면서 이전에 보관했던 프로세스 상태를 복구하는 과정을 말함
- → 프로세스는 각 독립된 메모리 영역을 할당받아 사용되므로, 캐시 메모리 초기화와 같은 무거운 작업이 진행되었을 때 오버헤드가 발생할 문제가 존재함
총 정리
- 프로세스: 운영체제로부터 시스템 자원을 할당받는 작업의 단위
- 스레드: 할당 받은 자원을 이용하는 실행의 단위
- 프로세스는 자신만의 고유 공간과 자원을 할당받아 사용하는데 반해, 스레드는 다른 스레드와 공간, 자원을 공유하면서 사용하는 차이가 존재함
- 프로그램→프로세스→스레드
참고자료
https://gmlwjd9405.github.io/2018/09/14/process-vs-thread.html
http://terms.tta.or.kr/dictionary/dictionaryView.do?word_seq=058048-1
https://kyun2da.dev/CS/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%99%80-%EC%8A%A4%EB%A0%88%EB%93%9C/