> For the complete documentation index, see [llms.txt](https://dev-lambda.gitbook.io/tech-interview-cs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://dev-lambda.gitbook.io/tech-interview-cs/os/thread.md).

# 스레드와 멀티스레딩

## Thread

* 한 프로세스 안에서도 여러 작업이 동시에 필요할 경우 가 있다.
* 프로세스 내 작업의 흐

ex) 유튜브 영상을 다운받으면서 실행, 게임 받으면서 패치노트 확인

![프로세스는 뭐고 스레드는 뭔가요? - YouTube](https://3832520726-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAZbJpKMAEz0yChgrkDfI%2Fuploads%2FJaw3baEXU9E0CMxmF7Iu%2F2020-07-05_14-40-17.png?alt=media\&token=5764396d-0939-4bd5-9954-f562031da09a)

* 프로세스는 자원을 공유하지 않지만, 쓰레드는 프로세스마다 주어진 전체 자원을 공유한다
* 속도와 효율에서 자원공유는 장점이지만, 시간문제로 발생하는 Error 발생 확률이 높다.
* [코드, 데이터, 스택, 힙을 각각 생성하는 프로세스](/tech-interview-cs/os/process-and-thread.md#undefined-2)와 달리 스레드는 코드, 데이터, 힙은 스레드 끼리 서로 공유한다.

## **멀티 스레드**

> 하나의 응용 프로그램에서 여러 스레드를 구성해 각 스레드가 하나의 작업을 처리하는 것

스레드들이 공유 메모리를 통해 다수의 작업을 동시에 처리하도록 해줌

<br>

**장점** : 독립적인 프로세스에 비해 공유 메모리만큼의 시간, 자원 손실이 감소 전역 변수와 정적 변수에 대한 자료 공유 가능

**단점** : 안전성 문제. 하나의 스레드가 데이터 공간 망가뜨리면, 모든 스레드가 작동 불능 상태 (공유 메모리를 갖기 때문)

* 멀티스레드의 안전성에 대한 단점은 Critical Section 기법을 통해 대비함

  > 하나의 스레드가 공유 데이터 값을 변경하는 시점에 다른 스레드가 그 값을 읽으려할 때 발생하는 문제를 해결하기 위한 동기화 과정
  >
  > ```
  > 상호 배제, 진행, 한정된 대기를 충족해야함
  > ```
