본문 바로가기

코딩

🙌Process와 Multithread란?

 

Process란?

운영체제 위에서 연속적으로 실행되고 있는 프로그램을 말한다.

 

Process안에는 각각 code, stack, heap, data가 있으며 간단히 설명하자면,

  • code : 프로그램을 실행하기 위한 코드
  • stack : 코드와 프로세스 안에서 함수들이 어떤순서로 실행되어야 하는지, 함수가 끝나면 다시 어디로 돌아가야 하는지의 대한 정보를 저장하고 있다.
  • heap : 오브젝트를 생성하거나 데이터를 만들때, 그 데이터들이 저장되는 공간 (동적으로 할당된 변수들이 저장)
  • data : 전역변수, static변수들이 할당되어 저장된다.

Multithread란?

한 Process안에서 여러가지 동작을 할 수있도록 다수의 Thread가 동시다발적으로 수행되는것을 말한다.

하나의 Process안에는 공통적으로 code, heap, data를 가지고있고, Thread 라는 작은단위 안에는 각각의 stack이 존재한다. Thread는 동시다발적으로 발생되어 Process가 좀 더 효율적으로 동작할 수 있도록 처리해주며 저마다 필요한 기능을 수행할 수 있다.

 

정리 하자면,

Process는 프로그래밍을 동작하는 최고단위이며,

Thread는 프로그램 안에서 동시에 여러가지 기능이 수행될 수 있도록 하는 작은 단위이다.

또한, Multithread는 한 프로세스 안에서 동시다발적으로 여러 기능을 수행할 수 있는것을 말한다.


그렇다면 자바스크립트는 Multithreading이 지원될까?

정답은 NO다! 

자바스크립트는 single threaded language 이다. 

자바스크립트 언어 자체에는 Multithreading을 할 수 있는 방법은 없지만, 자바스크립트가 동작하고있는 브라우저 위에서 웹 APIs 들을 이용하면 Multithreading이 가능하며 여러 가지의 Thread가 기능을 수행할 수 있게된다.

그러므로, 자바스크립트가 동작하는 런타임 환경에서 다양한 방법을 이용하여 Multithreading의 효과를 얻을 수 있는것이다.

또한 Multithreading 뿐만아니라, 이벤트루프를 이용하여 조금 더 다양한 동작을 실행할 수 있다.

자바스크립트 엔진 안에는 Memory Heap(할당된 데이터들이 저장되어져있는 공간) 과 Call Stack 이 있는데,

Call Stack은 함수가 실행되는 순서에 따라서 차곡차곡 쌓아놓는다.

(+stack은 자료구조 중 하나인데, LIFO(Last In First Out) 라고도 불리는데, 제일 나중에 들어온것이 제일 처음에 나가는 구조이다.)

 

function second() {
  console.log('hello');
  return;
}

function first() {
  second();
  return;
}

function main() {
  first();
  return;
}

main();

 

위와같은 예제에서 어떻게 Call Stack이 실행되는지 살펴보자

처음에 main함수가 먼저 호출되었기 때문에 main함수가 먼저 Call Stack에 들어오고, 그 다음 first함수가 들어오고,

마지막으로 second함수가 들어오게된다.

이후 console에서 'hello'를 출력하고 return이 될때 돌아갈 위치를 확인하기위해 Call Stack을 보게된다.

Call Stack은 어디로 돌아와야 되는지의 정보를 포함하고 있기때문에, 함수가 호출했던 순서를 기억했다가 함수가 종료되면 원래있던 자리로 돌아가는 것이다.

하여, 위와같이은 구조로 Multithreading의 기능을 수행할 수 있다.

 

 

 

 

 

'코딩' 카테고리의 다른 글

📁DOM 과 브라우저 렌더링 과정  (0) 2021.05.28
📐Window Size  (0) 2021.05.27
💻Web API 란 무엇일까?  (0) 2021.05.27
✍모듈 번들러 / Webpack  (0) 2021.05.25