먼저 프로그램이란 무엇일까?
프로그램은 어떤 작업을 위해 실행할 수 있는 파일을 의미한다.
프로세스(Process) 란?
- 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램
- 메모리에 올라와 실행되고 있는 프로그램의 인스턴스(독립적개체)
- 운영체제(OS)로부터 시스템 자원을 할당받는 작업의 단위
- 실행된 프로그램을 뜻한다.
프로세스는 각각 독립된 메모리 영영(Code, Data, Stack, Heap) 을 할당받는다.
프로세스 당 최소 1개의 스레드(메인스레드)를 가지고 있다.
각 프로세스는 별도의 주소 공간에서 실행되고, 다른 프로세스의 변수나 자료구조에 접근할 수 없다.
한 프로세스가 다른 프로세스의 자원에 접근하려면 프로세스간의 통신 (IPC , Inter - Process - Communication ) 을 사용해야 한다.
스레드(Thread) 란?
- 프로세스 내에서 실행되는 여러 흐름의 단위
- 프로세스의 특정한 수행 경로
- 프로세스가 할당받은 자원을 이용하는 실행의 단위
- 스레드는 프로세스 내에서 각각 stack 만 따로 할당받고, Code & Data & Heap 영역은 공유한다.
- 스레드는 한 프로세스 내에서 실행되는 흐름으로, 프로세스 내의 주소 공간이나 자원들을 같은 프로세스 스레드 끼리 공유 할 수 있다.
- 여러 스레드들은 힙 공간을 공유한다.
- 한 스레드가 프로세스 자원을 변경하면, 다른 스레드에서 변경 결과를 볼 수 있다.
멀티 프로세스
- 하나의 응용프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리하도록 하는 것
장점
- 하나의 프로세스가 장애가 나도 다른 작업은 정상적으로 진행된다
단점
- 컨텍스트 스위칭
** CPU에서 여러 프로세스를 돌아가면서 처리하는 작업을 의미한다.
프로세스는 자원을 공유할 수 없기 때문에, 컨텍스트 스위칭이 발생하면 모든 데이터를 모두 리셋하고 다시 캐쉬정보를 불러와야 한다.
멀티 스레드
- 하나의 응용프로그램을 여러 개의 스레드로 구성하고 각 스레드가 하나의 작업을 처리하는 것.
- 윈도우, 리눅스 등 멀티 스레딩을 기본으로 하고 있다.
장점
- 시스템 자원 소모 감소
- 시스템 처리량 증가
- 간단한 통신 방법으로 인한 프로그램 시간 단축
단점
- 주의 깊은 설계 필요
- 디버깅이 어렵다
- 멀티 스레드의 경우에 자원 공유의 문제가 발생한다 ( 동기화 문제 )
- 하나의 스레드에 문제가 생기면 전체 프로세스에 문제가 생긴다.
멀티 태스킹
- OS 를 통해 CPU가 작업하는데 필요한 자원(시간)을 프로세스 또는 스레드간에 나누는 행동
- 이를 통해서 여러 응용프로그램을 동시에 열고 작업할 수 있다.
CPU는 한번에 한가지 명령어 밖에 처리하지 못한다.
동시에 처리하는 것이 아닌, 재빠르게 프로세스들을 번갈아가면서 처리 , 관리하는 것이다.
참고
https://charlezz.medium.com/process%EC%99%80-thread-%EC%9D%B4%EC%95%BC%EA%B8%B0-5b96d0d43e37
https://gmlwjd9405.github.io/2018/09/14/process-vs-thread.html
'Knowledge > CS' 카테고리의 다른 글
[CS] 뮤텍스(Mutex) 세마포어(Semaphore) 란? (0) | 2022.12.02 |
---|---|
[CS] HTTP1.1 의 keep alive 란? (0) | 2022.12.01 |
[CS] 대칭키 암호화, 비대칭키 암호화 (0) | 2022.11.29 |
[CS] OSI 7 계층 , TCP/IP 4 계층이란? (1) | 2022.11.27 |
[CS] CORS 란? (0) | 2022.11.25 |
댓글