들어가기 전 Program : 어떤 문제를 해결하기 위하여 그 처리 방법과 순서를 기술하여 컴퓨터에 주어지는 일련의 명령문 집합체 Process : OS로부터 자원을 할당받는 독립적인 작업의 단위 Thread : process가 할당받은 자원을 이용하는 실행의 단위

<aside> 💡 스레드(Thread)는 프로세스 내의 독립적인 순차흐름 또는 제어를 말한다.

멀티 스레드(Multi-Thread) : 하나의 프로세스에서 여러 개의 스레드가 병행적으로 처리

Untitled

스레드란 개념은 프로세스 안에 포함되어 있다.(이러한 process는 program에 사용되는 데이터와 메모리 등의 자원 그리고 스레드(thread)로 구성된다.) 프로세스는 실행중인 프로그램 객체 자체를 말하고, 하나의 실행흐름 자체를 스레드라고 한다. 또한, 하나의 프로세스안에 스레드가 여러개 있는 것을 멀티 스레드 라고 한다.

<aside> 💡 ❓ 다른 자원들은 공유하면서 스택은 분리해서 사용하는 이유 → LIFO(Last In First Out) / 후입 선출이라는 스택의 특성과도 연관이 있다.왜냐하면? 코드와 데이터 힙 영역을 공유하는 것에는 큰 문제가 없지만,스택 영역은 스택이 쌓이면 위에서부터 프로세스가 섞인 채로 순서대로 나오게 되므로더 복잡해지기 때문에 원활한 실행 흐름을 위해 스택은 따로 독립적으로 존재하게 되는 것.

</aside>

네트워크 프로그래밍을 할때에는 멀티 쓰레딩이 필요하며, 특히 게임프로그래밍에서 많이 사용한다.예를 들어 사용자가 게임을 하려면 크게 1.사용자의 input, 2.네트워크로부터 전송되는 input 두개의 input이 있게 되며 1,2는 동시에 병렬적으로 일어나야 한다.

한 프로세스에 스레드가 2개 있다는 말은 해단 프로세스 내 실행흐름이 2개 존재한다는 의미이다. 한 프로그램 안에서 여러가지 태스크를 동시 수행하고 싶을때, 쓰레드를 사용한다.

네트워크 프로그래밍에서는 반드시 필요하다. 예를 들면, 가장 간단한 네트워크 프로그래밍인 채팅 프로그램에서는 채팅메시지에서 채팅을 쓰는 부분(키보드 input), 상대방의 채팅메시지를 전달받는 부분(network input) 결과적으로 single thread에서는 부자연스럽기 때문이다.

하나의 실행중인 프로세스 안에 여러개의 태스킹을 동시에 실행하고 싶을때 스레드를 이용할 수 있다.

https://images.velog.io/images/ryalya/post/1a9faf23-40d4-4a2d-8702-461c09d6395c/image.png

Multi-Process대신 Multi-thread를 사용하는 이유

1. Multi-Process

→ 하나의 컴퓨터에 여러 CPU 장착하여 하나 이상의 프로세스들을 동시에 처리(병렬)

2. Multi-thread