1. 프로그램
- 프로그램의 작업의 진행 계획이나 순서
- 어떤 문제를 해결하도록 컴퓨터에 주어지는 자료처리 방법과 순서를 기술한 명령문
2. 프로세스
- 운영체제에서 실행 중인 하나의 애플리케이션을 말한다
- 사용자가 애플리케이션을 실행하면 운영체제로부터 실행에 필요한 메모리를 할당받아 애플리케이션의 코드를 실행한 다.
- 이때 실행되는 애플리케이션을 "프로레스" 라고한다.
- 정리하면 프로그램(파일) 을 마우스로 더블 클릭으로 실행 시켰을 때, 이 실행되고 있는 프로그램을 프로세스라고 한다.
- 프로그램은 여러개의 프로세스로 만들기도한다.
- 예를 들어 브라우저 두 개 실행하면, 두개의 프로세스가 생성된다. 이렇게 하나의 애플리케이션은 여러 프로세스를 만들 기도 한다.

3. 스레드 ( 사전적 의미 : 실 )
- 스레드는 프로세스 안에서 한가지 작업을 실행하기 위해 순차적으로 실행되는 하나의 흐름이다.
- 한가지 작업을 실행하기 위해 순차적으로 실행한 코드를 실처럼 이어 놓았다고 해서 유래된 이름.
- 하나의 스레드는 코드가 실행되는 하나의 흐름이기 때문에, 한 프로세스 내에서 스레드가 두개라면 실행되는 흐름이 두개 생긴다는 의미이다.
- 스레드는 각자 자신의 Stack 영역을 보유한다.
- 스레드는 프로세스 내에서 Code, Data, Heap 영역을 공유한다.

4. 싱글 스레드 ( 한개의 실 )
- 싱글 스레드란 하나의 프로그램에서 동시에 하나의 코드만 실행할 수 있다는 뜻이다.
- 싱글 스레드란 코드가 실행되서 끝난 지점과 다음 코드의 시작 지점이 연결된 형태이다.
- 각 스레드는 한번에 하나의작업만 수행 가능하다.
- 각 작업은 순차적으로 실행된다. ( 다음 작업을 시작하기 전에 이전 작업을 완료해야한다.)
A -> B -> C
5. 멀티 스레드 ( 여러개의 실 )
- 하나의 프로세스 내에서 여러개의 스레드로 자원을 공유하며 작업을 나누어 실행하는 것이다.

장점
- 시스템 자원 소모 감소 ( 자원 효율성 증가 )
. 프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄어 자원을 효율적으로 관리할 수 있다.
- 시스템 처리율 향상 ( 처리비용 감소 )
. 스레드 간 데이터를 주고 받는 것이 간단해지고 시스템 자원 소모가 줄어든다.
. 스레드 사이 작업량이 작아 Context Switching이 빠르다. ( 캐시 메모리를 비울 필요 X )
- 간단한 통신방법으로 프로그램 응답시간 단축
. 스레드는 프로세스 내 스택영역을 제외한 메모리 영역을 공유하기 때문에 통신비용이 적다.
. 힙 영역을 공유하므로 데이터를 주고 받을 수 있다.
단점
- 자원을 공유하므로써 동기화 문제가 발생할 수 있다.
- 주의 깊은 설계가 필요하고 디버깅이 어렵다. ( 불필요한 부분까지 동기화하게되면, 대기시간으로 성능저하 발생 )
- 하나의 스레드에 문제가 생기면 전체 프로세스가 영향을 받는다.
- 단일 프로세스 시스템의 경우 효과를 기대하기 어렵다.
'개발 공부 > 개발 지식' 카테고리의 다른 글
| Nginx 란? (0) | 2023.07.18 |
|---|---|
| 자주 쓰는 Linux 명령어 (0) | 2023.07.18 |
| Eclipse에서 xml파일의 쓰임새 (2) | 2023.04.18 |
| 데이터베이스 샤딩이란? (1) | 2023.04.17 |
| 배치 ( Batch ) 와 스케줄러 ( Schduler ) Feat. Quartz (0) | 2023.04.17 |