# 스레드와 멀티스레딩

## Thread

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

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

![프로세스는 뭐고 스레드는 뭔가요? - YouTube](/files/kBL6KYy7fjtoMETWjNNg)

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

## **멀티 스레드**

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

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

<br>

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

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

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

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


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://dev-lambda.gitbook.io/tech-interview-cs/os/thread.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
