블로그

illustrations illustrations illustrations illustrations illustrations illustrations illustrations

Javascript Single Thread

Published on May 27, 2024 by ultrakeypoint on dev javascript thread

Javascript Single Thread

Javascript는 개발하다 보면 데이터를 불러오고, 저장하고, 반복적으로 호출하는 등 다양한 요청을 어떻게 처리할지 고민하게 된다. XMLHttpRequest, Ajax, Axio, Promise, await, async 등 동시성 기능을 개선하기 위해 발전했다.

몇십 년이 지난 지금은 Package나 Libraray를 통해 쉽고 편리하게 사용하고 있다. 그런데, 우리는 한 번쯤 Javascript는 Single Thread라는 얘기를 들어본 적이 있을 것이다. Thread가 1개라는 것은 1개의 로직만 실행할 수 있다는 것인데, 어떻게 여러 개의 로직을 비동기적으로 처리할 수 있을까?

브라우저가 런타임 때 동작할 코드를 Call Stack에 등록하고, Web API를 통해 실행하고 이후에 처리될 내용을 Task Queue 등록한 후 Call Stack이 비워질 때까지 대기 후 처리한다. 이 동작은 브라우저에서 처리하기 때문에 자세하게 알면 좋겠지만 생략하고, 이 동작은 정확한 시간에 처리가 안될 수도 있다는 것이 중요한 사항이다.

setTimeout(() => console.log("Hello World"), 3000);

위 코드는 3초 후에 Hello World를 로그를 찍는 단순한 코드이다. 여기서 정확하게 알아야 될 부분은 3초 후에 실행하다가 아닌 최소 3초를 기다려야 하는 시간이라는 것이다. Javascript는 Single Thread이면서, 메세지 큐를 처리하는 이벤트 루프의 논 블로킹 처리 특징 때문에 정확한 시간에 처리될 수도 있고, 처리하지 못할 수도 있다. 하지만 이런 특징 덕분에 이벤트를 처리하면서 계속 사용자의 입력을 처리할 수 있는 것이 매력적이다.

EventLoopVisual
(출처: EventLoop)

`오늘도 울킷!`
도움이 되셨다면, 댓글 부탁 드립니다. :+1:

다른 스토리

다국어 처리 개발 빠르게 하기

다국어 처리 개발 빠르게 하기

웹페이지 전체 중 우리나라 한국말로 작성된 페이지의 총수는 1%도 안 된다는 사실 알고 계셨나요? 전 구글의 디렉터이자, 최초의 비영어권 출신인 로이스 김은 성장하기 위한 3가지 요소를 건강, 네트워크, 그리고 영어라고...

더 보기
Vue Table 10만 데이터 로드하기

Vue Table 10만 데이터 로드하기

서비스 초기에는 데이터가 많지 않아 테이블에 데이터를 로드하는 데 이슈가 많지 않습니다. 하지만, 서비스가 한 달, 두 달, 1년, 5년 되다 보면 데이터의 양도 많고 데이터의 종류도 다양해진다. 이번에는 국내에서...

더 보기
오라클 클라우드 우분투 기본 설정

오라클 클라우드 우분투 기본 설정

오라클 클라우드 컴퓨터 인스턴츠 관리 관련 기본적으로 해야될 설정을 메모합니다. 설정하지 않으면 SSH 사용 시 멈추거나 서버가 다운되는 현상이 있기 때문에 필수사항은 반드시 적용해서 안정적인 서버 운영에 도움되세요

더 보기