2021년 9월 9일에 작성된 문서 3번 입니다.
Computer Science 배운 내용을 정리했습니다.
1. 프로세스(Process)
운영체제에서는 실행 중인 하나의 애플리케이션
- 사용자가 애플리케이션을 실행하면, 운영체제로부터 실행에 필요한 메모리를 할당 받아 애플리케이션의 코드를 실행
예를 들어 Chrome 브라우저를 두 개 실행하면, 두 개의 프로세스가 생성됩니다. 이렇게 하나의 애플리케이션은 여러 프로세스(다중 프로세스)를 만들기도 합니다.

2. 스레드(Thread)
한 가지 작업을 실행하기 위해 순차적으로 실행한 코드
- 하나의 스레드는 코드가 실행되는 하나의 흐름
- 한 프로세스 내에 스레드가 두 개라면 코드가 실행되는 흐름이 두 개 생긴다.
3. 멀티 스레드(Multi-Thread)
- 멀티 태스킹: 두 가지 이상의 작업을 동시에 처리하는 것
- 운영체제는 멀티 태스킹을 할 수 있도록, 프로세스마다 CPU 및 메모리 자원을 적절히 할당하고 병렬로 실행
- 멀티 프로세스 : 애플리케이션 단위의 멀티 태스킹
- 멀티 스레드 : 애플리케이션 내부에서의 멀티 태스킹

프로세스와 스레드

1. 스레드 특징
- 프로세스 내에서 실행되는 흐름의 단위
- 각 스레드마다 call stack이 존재
- call stack: 실행중인 서브루틴을 저장하는 자료 구조
- 스레드는 다른 스레드와 독립적으로 동작
2. 멀티 스레딩의 장점
- 프로세스 간 통신 방법(IPC)에 비해 스레드 간의 통신 방법이 훨씬 간단
- 시스템의 처리량(Throughput)이 향상
- 자원 소모가 줄어들어 자연스럽게 프로그램의 응답 시간이 단축
3. 멀티 스레딩의 문제
4. 동시성과 병렬성

- 동시에 돌릴 수 있는 스레드 수는 컴퓨터에 있는 코어 갯수로 제한.
- 시분할 : 운영체제는 각 스레드를 시간에 따라 분할하여, 여러 스레드가 일정 시간마다 돌아가면서 실행되게한다.
- Concurrency(동시성, 병행성): 여러 개의 스레드가 시분할 방식으로 동시에 수행되는 것처럼 착각을 불러일으킴
- Parallelism(병렬성): 멀티 코어 환경에서 여러 개의 스레드가 실제로 동시에 수행됨
5. Context Switching
- 다른 태스크(프로세스, 스레드)가 시작할 수 있도록 이미 실행중인 태스크(프로세스, 스레드)를 멈추는 것
Written with StackEdit.