🎈 프로세스 (Process)
- 운영체제에서는 실행 중인 하나의 애플리케이션을 프로세스라고 한다.
- 사용자가 애플리케이션을 실행하면
--> 운영체제로부터 실행에 필요한 메모리를 할당 받아
--> 애플리케이션의 코드를 실행한다.
- 이 때 실행되는 애플리케이션을 '프로세스' 라고 한다.
(예) 크롬 브라우저 2개를 실행하면, 2개의 프로세스가 생성됨.
이렇게 하나의 애플리케이션은 여러 프로세스를 만들기도 함
🎈 스레드 (Thread)
- 사전적 의미 : 한 가닥의 실
- 한 가지 작업을 실행하기 위해, 순차적으로 실행한 코드를 실처럼 이어 놓았다고 해서 붙여진 이름
- 하나의 스레드 = 하나의 흐름
- 프로세스 내에서 실행되는 흐름의 단위
- 한 프로세스 내에 스레드가 2개라면, 코드가 실행되는 흐름이 2개 생긴다는 의미
- 스레드는 다른 스레드와 독립적으로 동작
- 각 스레드마다 call stack이 존재 (stack : 실행중인 서브루틴을 저장하는 자료구조)
🎈 멀티 스레드 (Multi-Thread)
- 멀티태스킹 : 두 가지 이상의 작업을 동시에 처리하는 것
- 운영체제는 멀티태스킹을 할 수 있도록 프로세스마다 CPU 및 메모리 자원을 적절히 할당하고 병렬로 실행함
- 예를들어, 크롬 브라우저에서 음악을 들으면서 인텔리제이로 코딩을 한다고 할 때
하나의 프로세스가 어떻게 두 가지 이상의 작업을 처리할 수 있는 것일까? --> '멀티 스레드'
- 멀티 스레드는 애플리케이션 내부의 멀티 태스킹이라고 할 수 있음
🎈 멀티 스레드 (Multi-Thread)의 장점
- 메모리 공간과 시스템 자원의 소모가 줄어 든다.
- 스레드 간의 통신이 필요한 경우, 별도의 자원을 이용하는 것이 아니라
전역변수 공간 또는 동적으로 할당된 공간인 Heap을 이용한다.
- 프로세스 간 통신방법에 비해 스레드 간의 통신방법이 간단하다.
- 시스템처리량이 향상되고, 자원의 소모가 줄어들어 -> 프로그램 응답 시간이 단축된다.
- 이런 장점 때문에, 여러 프로세스로 할 수 있는 작업을 하나의 프로세스에서 스레드로 나눠 수행한다.
🎈 멀티 스레드 (Multi-Thread)의 단점
- 멀티 프로세스 기반으로 프로그래밍 할 때에는 프로세스 간 공유하는 자원이 없다.
따라서 동일한 자원에 동시에 접근하는 일이 없었다.
- 하지만 멀티 스레딩을 기반으로 프로그래밍 할 때는 공유하는 자원에 대한 고민이 필요하다.
서로 다른 스레드가 같은 데이터에 접근하고,
Heap 영역을 공유하기 때문에
서로 다른 스레드가 같이 사용중인 변수나 자료구조에 접근하여 엉뚱한 값을 읽어오거나 수정하는 일이 발생할 수 있다.
- 그렇기 때문에 멀티스레딩 환경에서는 '동기화' 작업이 필요하다.
동기화를 통해서 작업 처리 순서를 제어하고,
공유 자원에 대한 접근을 제어해야 한다.
'Programming > 프로그래밍 내용 정리' 카테고리의 다른 글
[OS] Context Switching이란? (0) | 2022.07.29 |
---|---|
[자료구조] Linked List(연결 리스트) 와 Array(배열)의 차이 (0) | 2022.07.29 |
Docker를 사용하여 MySQL 설치하기 (0) | 2022.04.17 |
[Jenkins] CI, CD, 젠킨스에 대해 알아보자 (0) | 2021.07.29 |
[Git] Git-flow 전략에 대해 알아보자 (0) | 2021.06.11 |