자바스크립트 - 싱글 스레드

  • 자바스크립트가 싱글 스레드이기 때문에 동시성 문제가 발생합니다.

  • 그 이유는 자바스크립트가 원래는 현재 쓰이고 있는 용도를 염두에 두고 만들어진 언어가 아니기 떄문입니다. 자바스크립트의 원래 목표는 더 빠르게 사용자 피드백을 제공하고 인터넷 트래픽을 줄이는 것이었습니다. 왜냐하면 만들어질 당시 인터넷은 아주 느렸기 때문입니다. 자바스크립트의 등장으로 사용자 피드백을 브라우저 상에서 처리할 수 있었습니다. 예를 들어 입력 필드의 유효성검사를 서버가 아닌 웹 브라우저 상에서 가능하도록 했습니다.

  • 자바스크립트는 사용자 이벤트에 응답하는 짧은 프로그램을 실행하기 위해 만들어졌고, 이벤트 루프(Event Loop) 사용하여 구현되었습니다.

    * 실행할 작업을 이벤트 큐에 추가하고 자바스크립트는 작업을 큐에서 한번에 하나씩 꺼내서 실행합니다. 
    * 자바스크립트는 싱글 스레드라서 이런 작업은 인터럽트 할 수 없고 이벤트 큐에 추가되는 순서를 제어할 수 없습니다.
    • 자바스크립트 초기에는 비동기 통신을 언어 설계에 포함하지 않았습니다.

      • 브라우저는 폼을 제출하고 서버는 웹 페이지를 반환하는 방식이었고 DOM의 등장으로 기존 웹 페이지 전체를 서버에서 새로운 HTML 페이지를 받아서 바꾸는 대신 일부만 변경할 수 있도록 됐습니다. XHR의 등장으로 기존의 페이지 로드 모델에서 벗어나 백그라운드에서 브라우저와 서버가 통신할 수 있게 됐습니다.

      • 이런 변화로 웹 페이지 복잡도가 극적으로 증가하고 자바스크립트 코드가 더 많이 작성되었습니다. 웹 페이지는 서버와의 비동기 통신에 극도로 의존하게 되었습니다. - 단일 스레드 모델과 비동기 통신을 잘 맞지 않았습니다.

※ Reference

Why JavaScript is a single-thread language that can be non-blocking? | geeksforgeeks

<(한 권으로 읽는) 컴퓨터 구조와 프로그래밍 - 12. 병렬성과 비동기성>

Last updated