[JS 작동원리] 프로세스, 스레드, 멀티 스레드, 싱글 스레드

posinity·2023년 2월 24일
0

JavaScript

목록 보기
19/31

프로세스

실행되고 있는 컴퓨터 프로그램, 운영체제에서 할당하는 작업의 단위
프로그램은 개별적인 프로세스를 가지고,
프로세스 간 메모리 등의 자원을 공유하지 않음

스레드

프로세스가 할당받은 자원을 이용하는 실행의 단위
프로세스는 스레드를 여러 개 생성해 여러 작업을 동시에 처리할 수 있음
스레드들은 부모 프로세스의 자원을 공유하며, 같은 주소의 메모리에 접근 가능하기 때문에 데이터 공유가 가능함.

스레드는 프로세스 내에서 각각 Stack만 따로 할당받고 Code, Data, Heap 영역은 공유한다.
같은 프로세스 안에 있는 여러 스레드들은 같은 힙 공간을 공유한다. 반면에 프로세스는 다른 프로세스의 메모리에 직접 접근할 수 없다.
스레드는 싱글 스레드와 멀티 스레드로 나뉜다.

싱글 스레드는 하나의 스레드가 하나의 작업만 수행하여 순서대로 처리. 멀티 스레드는 병렬로 일을 처리하며 여러가지 스레드를 한꺼번에 처리한다.

싱글 스레드

stack이 하나임. 코드를 하나씩 실행시킴.
싱글스레드이기 때문에 작업을 할당해주는 것이 필요하다
바로 실행되지 않는 setTimeout같은 코드들은 대기실로 보낸다
대기실로 보내는 코드 : Ajax 요청 코드, 이벤트리스너, setTimeout(0초있다 실행하는 것으로 코드를 짜도 무조건 대기실로 보냄) -> 비동기적 처리

Queue

처리가 완료된 코드들을 보내는 곳.
stack에 하나씩 올려보낸다. 하지만 stack이 비어있을 때만 올려보낸다.

멀티 스레드 (Multi thread)

하나의 응용프로그램을 여러 개의 스레드로 구성하고 각 스레드로 하여금 하나의 작업을 처리하도록 하는 것
ex) 멀티 스레드가 적용된 웹 브라우저 프로그램에서 하나의 스레드가 이미지 파일을 로드하고 있는 동안, 다른 스레드에서 사용자와 상호작용 가능
하나의 스레드에 문제가 발생하면 전체 프로세스가 영향을 받기에 주의 깊은 설계가 필요하다.
또한 스레드 간의 자원 공유로 동시성 문제가 발생한다.

자바스크립트는 왜 싱글 스레드를 선택했을까?

자바스크립트는 웹페이지의 보조적인 기능을 수행하기 위해 만들어진 언어.
(웹사이트를 구현하던 개발자들에게 자바라는 언어는 다소 무겁고 어려운 언어였기 때문에, 브랜던 아이크라는 사람을 스카우트하여 ‘자바스크립트’가 탄생되었다.)
왜 무겁고 어려운 언어라 생각했을까? → 멀티 스레드 모델은 프로그래밍 난이도가 높다.

멀티 스레드로 구현된 서비스에서는 동시성 문제를 신경써야 하지만, 자바스크립트는 멀티 스레드 환경에서 발생할 수 있는 복잡한 문제를 신경쓸 필요 없다.
실제로 구글의 chrome 브라우저도 기존 웹 페이지에서 엄청난 동시성 문제를 일으킬 수 있다는 이유로 단일 웹 사이트 페이지의 자바스크립트 코드가 동시에 실행되는 것을 허용하지 않는다.

참고자료

자바스크립트는 왜 싱글 스레드를 선택했을까? 프로세스, 스레드, 비동기, 동기, 자바스크립트 엔진, 이벤트루프

개발자 90%가 모르는 자바스크립트 동작원리 (Stack, Queue, event loop)

자바스크립트는 왜 싱글 쓰레드일까?

profile
문제를 해결하고 가치를 제공합니다

0개의 댓글