기타

프로세스와 스레드

js0616 2024. 7. 25. 23:14

프로세서 : 중앙 처리 장치 , cpu 

프로그램 : 특정 작업을 수행하기 위해 작성된 소프트웨어를 의미합니다.

프로세스 : 실행 중인 프로그램의 인스턴스로, 메모리(RAM)에 로드되어 CPU에서 실행 중인 프로그램의 상태

 

멀티 태스킹 : 동시에 여러 작업을 처리하는 능력 , ex) 유튜브 키고 게임하기

멀티 프로세서 : 여러 개의 독립적인 CPU가 하나의 시스템에서 동시에 작업을 처리하는 구조 (컴퓨터가 여러개)

다중 코어 : 하나의 CPU 내부에서 여러 개의 실행 단위(코어)가 병렬로 작업을 처리하는 구조 (듀얼코어 .. )

 

작업 방식

동시성 : 1개의 CPU가 매우 빠르게 작업을 번갈아가며 실행하여 동시에 여러 작업이 처리되는 것처럼 보이게 하는것

병렬성 : 여러개의 CPU 코어나 처리 장치가 동시에 여러 작업을 독립적으로 처리하는 것을 말합니다.


프로세스

프로그램이 실행되기 위해서는 보조 기억장치 (하드 디스크, SSD 등)에 저장되어 있는 실행 파일(exe) 이 주기억장치인 RAM으로 로드되어야 합니다. 이 과정에서 프로그램은 프로세스가 됩니다. 프로세스는 메모리에 올라가면 CPU 또는 프로세서가 그 안의 명령어들을 실행하게 됩니다.

 

프로세스 상태

실행, 준비, 대기 등의 실행 상태를 가지며 실행 상태가 변할때마다 쓰레드 문맥교환(context switching)을 수행한다.

 

 


멀티 프로세스

하나의 프로그램에서 여러 개의 프로세스를 실행하는 것을 의미한다. 

하나의 부모 프로세스가 여러 개의 자식 프로세스를 생성함

 

부모 프로세스와 자식 프로세스는 각각 고유한 PID(Process ID)를 가지고 있다.

이를 통해 부모 프로세스와 자식 프로세스 간의 통신이 가능하다

하지만, 서로 다른 프로세스로 독립적으로 실행되며, 독립적인 메모리 공간을 가지며 다른 작업을 수행한다.

 

대표적인 예로 웹 브라우저의 상단 탭(Tab) 이나 새 창을 들 수 있다. 

각 브라우저 탭은 같은 브라우저 프로그램 실행이지만, 각기 다른 사이트 실행을 행하기 때문이다.

 

대규모 웹 서비스에서는 수많은 요청을 동시에 처리하기 위해 여러대의 서버를 두고 로드 밸런서(Load Balancer)와 같은 장비를 사용하여 클라이언트 요청 트래픽을 분산 시킨다. 이때 여러대의 서버는 컴퓨터를 여러개를 말하는 것일 수도 있고, 하나의 성능 좋은 컴퓨터에 여러개의 서버 프로세스를 두는 것을 말하기도 한다. 멀티 프로세스의 상황은 후자이다.

 

 

멀티 프로세스의 단점
1. Context Switching Overhead
멀티 태스킹을 구성하려면 컨텍스트 스위칭(context switching) 을 사용해야한다.

프로세스를 컨텍스트 스위칭 하면,

CPU는 다음 프로세스의 정보를 불러오기 위해 메모리를 검색하고,

CPU 캐시 메모리를 초기화하며,

프로세스 상태를 저장하고,

불러올 데이터를 준비해야 하기 때문에,

이로 인한 빈번한 Context Switching 작업으로 인해 비용 오버헤드가 발생할 수 있게 된다.

반면 스레드를 컨텍스트 스위칭하면 프로세스 스위칭 보다 가벼워 훨씬 빠르고 좋다.

 

2. 자원 공유 비효율성
멀티 프로세스는 각 프로세스가 독립적인 메모리 공간을 가지므로, 결과적으로 메모리 사용량이 증가하게 된다.
만일 각 프로세스간에 자원 공유가 필요할 경우 IPC(Inter-Process Commnuication)을 사용하여야 한다.


 

스레드

 

스레드(thread)는 프로세스 내에서 실행되는 흐름의 단위를 말한다. 

main { } 함수를 실행한다면  'main의 시작 -> main 의 끝' 이 하나의 흐름 단위이며 스레드라고 한다. 

스레드는 프로세스의 코드에 정의된 절차에 따라 실행되는 특정한 수행 경로다.

CPU 입장에서의 최소 작업 단위

 

멀티스레드(multithread)

일반적으로 한 프로그램은 하나의 스레드를 가지고 있지만, 프로그램 환경에 따라 둘 이상의 스레드를 동시에 실행할 수 있다. 하나의 프로세스를 구성하는 스레드들은 프로세스에 할당된 메모리, 자원 (code, data, heap) 영역을 공유한다.

 

 

 

 

멀티스레드의 장점

  1. Context-Switching할 때 공유하고 있는 메모리만큼의 메모리 자원을 아낄 수 있다.
  2. 스레드는 프로세스 내의 Stack 영역을 제외한 모든 메모리를 공유하기 때문에 통신의 부담이 적어서 응답 시간이 빠르다.

멀티스레드의 단점

  1. 동기화 문제 : 공유된 메모리에 여러 스레드가 동시에 접근할 경우, 데이터의 일관성을 유지하기 위한 추가적인 작업
  2. 교착상태 (deadlock) :  서로 자원을 기다리며 실행이 멈추는 상태

 

 

 

 

 

 

 

https://goodgid.github.io/What-is-Thread/#google_vignette

 

https://ko.wikipedia.org/wiki/%EC%8A%A4%EB%A0%88%EB%93%9C_(%EC%BB%B4%ED%93%A8%ED%8C%85)

 

https://inpa.tistory.com/entry/%F0%9F%91%A9%E2%80%8D%F0%9F%92%BB-multi-process-multi-thread#multi_process

 

https://www.youtube.com/watch?v=iks_Xb9DtTM

 

https://chatgpt.com/

 

https://velog.io/@gil0127/%EC%8B%B1%EA%B8%80%EC%8A%A4%EB%A0%88%EB%93%9CSingle-thread-vs-%EB%A9%80%ED%8B%B0%EC%8A%A4%EB%A0%88%EB%93%9C-Multi-thread-t5gv4udj

 

https://velog.io/@gun_123/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C-%EC%8A%A4%EB%A0%88%EB%93%9C%EC%9D%98-%EA%B0%9C%EB%85%90%EA%B3%BC-%EC%83%81%ED%83%9C-%EB%B3%80%ED%99%94

 

https://velog.io/@raejoonee/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%99%80-%EC%8A%A4%EB%A0%88%EB%93%9C%EC%9D%98-%EC%B0%A8%EC%9D%B4

 

https://f-lab.kr/insight/multi-process-vs-multi-thread