싱글스레드언어의 특징

nevermind·2023년 1월 5일
0

기술면접

목록 보기
22/25

javascript는 싱글스레드언어이다.
싱글스레드 언어란 무엇이고 어떤 특징이 있을까?

🌝 싱글스레드 언어란? (single thread)

  • 한번에 하나의 작업만 수행할 수 있음을 의미한다
  • 다른 작업이 중간에 끼어들 수 없고, 기존에 수행하던 작업이 끝나야만 그 다음 작업 수행 가능한다

🤷 그렇다면 비동기, 동시성 등은 어떻게 할 수 있을까? : Jabvascript의 동작 원리

  • 메모리 힙: 메모리의 할당이 이루어지는 곳
  • 콜스택: 코드가 호출되며 스택이 쌓이는 곳
    - 하나의 메인스레드에서 호출되는 함수들은 콜스택에 쌓이고 이 함수들은 LIFO(Last In First Out)방식 (나중에 들어온 코드가 먼저 실행)으로 실행

🔱 비동기 작업은 어떻게 이루어지는 것일까?

  • 동시성을 보장하는 비동기 작업들은 js엔진을 구동하는 런타임환경에서 담당(브라우저 또는 Node.js)
  • Web API: 웹 브라우저에서 제공하는 API로 AJAX나 Timeout등의 비동기 작업을 실행
  • Task Queue: Callback Queue라고도 하며 Web API에서 넘겨받은 Callback함수를 저장
  • Event Loop: Call Stack이 비어있다면 Task Queue의 작업을 Call Stack으로 옮김

🔁 순서

  1. 코드가 호출스택에 쌓이고 실행되면, js엔진은 비동기 작업을 Web API에 위임
  2. Web API는 해당 비동기 작업 수행 후 콜백함수를 이벤트 루프를 통해 Task Queue에 넘김
  3. 이벤트 루프는 콜스택에 쌓인 함수가 없을 때, Task Queue에 대기하는 콜백 함수를 콜스택에 넘김
  4. 콜스택에 쌓인 콜백함수가 실행되고 콜스택에서 제거

❔ if(setTimeout이 0초라면?)

setTimeout은 Web API가 지원하는 비동기 함수이기에 0초로 해놔도 콜스택에 바로 쌓이는 다른 함수들보다 늦게 호출

정리

  • js는 싱글스레드 언어이기에 한번에 한가지 일만 할 수 있다
  • js엔진에는 콜스택과 메모리 힙이 존재
  • 비동기처리를 한다면 Node.js나 브라우저에서 제공하는 Web API를 사용하여 따로 처리할 수 있다
  • 비동기 처리방법에는 콜스택 실행하고 Web API로 보낸 후 다 되면 Task Queue로 보내 콜스택이 비어있다면 콜스택으로 보내어 처리해준다
  • 멀티 스레드로 실행되는 언어는 동시성 문제에 더 많은 처리가 필요하다고 한다. 싱글 스레드는 쉽지만 콜스택에 많은 함수들을 쌓아놓는 것은 불편함을 초래할 수 있기에 실행이 오래 걸리는 코드는 setTimeout을 이용하여 적절하게 다른 태스크로 나누어주는 등 방법이 있다

출처: https://medium.com/@vdongbin/javascript-%EC%9E%91%EB%8F%99%EC%9B%90%EB%A6%AC-single-thread-event-loop-asynchronous-e47e07b24d1c
https://chanyeong.com/blog/post/44

profile
winwin

0개의 댓글