본문 바로가기

Frontend Study - 2/Basic

프로세스와 스레드 (Process & Thread)

 

프로그램(Program) : 컴퓨터에서 실행될 때 특정 작업을 수행하는 일련의 명령어들의 모음.


프로세스(Process) 


운영체제 위에서 연속적으로 독립적으로 실행되고 있는 프로그램. 실행 중에 있는 프로그램.

프로세스마다 할당된 데이터, 리소스들이 지정되어 있습니다. (CPU 시간..)


운영체제로부터 시스템 자원을 할당받는 작업의 단위
즉, 동적인 개념으로는 실행된 프로그램을 의미합니다.


운영되기 위해 필요한 주소 공간
Code, Data, Stack, Heap의 구조로 되어 있는 독립된 메모리 영역

 

 

  • 프로세스는 각각 독립된 메모리 영역(Code, Data, Stack, Heap의 구조)을 할당받습니다.
    • Code : 실행할 프로그램의 코드 및 매크로 상수가 기계어 형태로 저장되는 공간. CPU는 코드영역에 저장된 명령어를 하나씩 처리한다.
    • Data : 코드에서 선언한 전역변수, 정적(Static) 변수가 저장되는 공간.
    • Stack : 실행되는 함수 안에서 선언된 지역변수, 매개변수, 리턴값등이 저장되고, 함수 호출시 기록되는 공간
    • Heap : 관리가 가능한 데이터 이외에 다른 형태의 데이터를 관리하기 위한 공간(Free Space). 이 공간은 동적 메모리 할당 공간이므로 사용이 끝나면 운영체제로 반납된다.
  • 기본적으로 프로세스당 최소 1개의 스레드(메인 스레드)를 가지고 있습니다.
  • 각 프로세스는 별도의 주소 공간에서 실행되며, 한 프로세스는 다른 프로세스의 변수나 자료구조에 접근할 수 없습니다.
  • 한 프로세스가 다른 프로세스의 자원에 접근하려면 프로세스 간의 통신(IPC, inter-process communication)을 사용해야 합니다. ex) 파이프, 파일, 소켓 등을 이용한 통신 방법 이용


스레드(Thread) 

  • 프로세스 내에서 실행되는 여러 흐름 단위
  • 프로세스의 특정 실행 단위
  • 프로세스가 할당받은 자원을 이용하는 실행 단위

 

프로세스 안에서 여러개가 동작할 있습니다. ex) 음악을 하면서 사진편집을 있는 프로그램.

 

쓰레드마다 각각 해야되는 업무를 배정받게 됩니다.

 

스레드는 프로세스 내에서 각각 Stack만 따로 할당받고 Code, Data, Heap 영역은 공유합니다. 

자기들만의 수행해야 하는 함수의 호출을 기억해야 되기 때문에 쓰레드마다 스택이 할당 되어지고,

'일꾼'들(스레드들)은 프로그램을 위해서 일해야 함으로 프로세스에 지정된 코드와 데이터 힙들에 공통적으로 접근하여 사용하고 업데이트 합니다.

 

스레드는 한 프로세스 내에서 동작되는 여러 실행의 흐름으로, 프로세스 내의 주소 공간이나 자원들(힙 공간 등)을 같은 프로세스 내에 스레드끼리 공유하면서 실행됩니다.

 

각각의 스레드는 별도의 레지스터와 스택을 갖고 있지만, 힙 메모리는 서로 읽고 쓸 수 있습니다. 같은 프로세스 안에 있는 여러 스레드들은 같은 힙 공간을 공유합니다.
한 스레드가 프로세스 자원을 변경하면, 다른 이웃 스레드(sibling thread)도 그 변경 결과를 즉시 볼 수 있습니다.

 

반면에 프로세스는 다른 프로세스의 메모리에 직접 접근할 수 없습니다.

 

쓰레드는 동시다발적으로 발생할 있기 때문에 프로세스가 효율적으로 일을 있도록 도와줍니다. 즉 다양한 일들 동시에 있습니다.

 

하지만 마찬가지로 쓰레드들은 프로세스에 공통적으로 할당된 리소스에 동시 다발적으로 접속해서 일을 하기 때문에 순서가 맞지 않거나 뒤틀리 문제가 있을 수 있습니다.

 

이것이 멀티쓰레딩 프로그래밍이 까다로운 이유입니다.

 

프로세스는 프로그래밍을 동작하는 최고의 단위이고,

쓰레드는 프로그램안에서 동시에 여러 작업이 수행될 수 있게 하는 작은 일꾼 단위입니다.

 

 

자바스크립트는 싱글쓰레드 언어이나,

브라우저에 멀티쓰레딩이 가능하게 하는 api들이 있습니다.





https://gmlwjd9405.github.io/2018/09/14/process-vs-thread.html

https://academy.dream-coding.com/courses/browser101

https://www.jiniaslog.co.kr/article/view?articleId=152

 

'Frontend Study - 2 > Basic' 카테고리의 다른 글

쿠키 & 세션 & 캐시  (0) 2022.09.19
인터넷이란 무엇인가?  (0) 2022.06.28
Semantic Web & Semantic Tag  (0) 2022.06.20