inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

AI시대의 웹개발 : 비동기 프로그래밍과 데이터 통신 최적화(프롱트 특강)

이벤트루프와 단일쓰레드의 부정확성

web api 에 대해 질문이 있습니다.

해결된 질문

114

이동훈

작성한 질문수 6

0

자바스크립트는 싱글 스레드 언어라고 알고 있습니다.

자바스크립트 자체적으로 실행하지 못하고

Node나 브라우저에서 실행해야 되는데

브라우저에서 실행할 경우 선생님께서 가르쳐주신 콜스택, Callback Queue, WebpAPI 모듈이 EventLoop를 통해 멀티스레드처럼 동작한다고 이해했습니다.

 

여기서 질문이 있는데요.

SetTimeout에서의 콜백이 WEB API에게 던져놓고 시킬 때,

싱글스레드 녀석은 CallStack에서 일한다고 바쁜데 언제 SetTimeout 콜백을 처리하나요?

WEB APIs가 콜백을 따로 처리한다는 건

또 다른 스레드가 존재한다는 의미인가요?

 

그러면 싱글스레드인척하는 멀티스레드인셈인가요?? ㅎㅎ;

javascript promise frontend fetch-api

답변 2

0

프롱트

안녕하세요.

setTimeout 에 전달된 콜백은 WEB APIs영역에서 실행되는건 아닙니다.

이 콜백함수 역시 call stack에 올라와서 실행되게 됩니다.

 

그러면 WEB APIs는 뭐하는거냐?

그곳에서는 지정된시간(settimeout에서 지정한 delay time)을 계산해주는 역할이라고 보면됩니다.

그 활동 자체는 별도의 프로세스처럼 동작한다고 생각하셔도 됩니다.

메인쓰레드와 별개로 처리되는것이지요.

 

그렇게 WEB API의 역할이 끝나면 비로서 콜백함수를 콜백큐에 보내고, 이벤트 루프가 콜스택에 올려서

실행할 수 있는 상태로 만들어주죠.

 

이해가 되셨으면 좋겠네요 ^^

 

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. 이동훈님!

자바스크립트의 동작 방식과 관련된 질문을 해주셨네요. 브라우저 환경에서의 자바스크립트는 싱글 스레드지만, 브라우저 자체가 멀티스레드로 동작하여 비동기 작업을 효율적으로 처리할 수 있습니다. setTimeout과 같은 함수는 Web API를 통해 비동기적으로 처리됩니다.

자바스크립트 런타임은 다음의 주요 구성요소로 이루어져 있습니다:

  1. Call Stack: 여기서 모든 함수가 호출되고 실행됩니다. 자바스크립트는 싱글 스레드로 이 Call Stack을 통해 매 순간 하나의 작업만 처리합니다.

  2. Web APIs: 비동기 작업(예: setTimeout, fetch)이 이곳에서 처리됩니다. 이 작업은 Call Stack을 차단하지 않고, 완료되면 Task Queue에 콜백을 전달합니다.

  3. Event Loop: Call Stack이 비어있을 때 Task Queue에 있는 콜백을 Call Stack으로 보내 실행하는 메커니즘입니다.

setTimeout의 콜백 함수는 실제로 Web API에서 바로 실행되지 않습니다. 대신, 지정된 시간이 지나면 Task Queue에 콜백이 추가되고, Call Stack이 비어있을 때 Event Loop가 이 콜백을 Call Stack으로 보냅니다.

결론적으로 Web APIs는 병렬로 동작하지는 않지만, 비동기로 작업을 처리할 수 있도록 도와줍니다. 따라서 자바스크립트는 싱글 스레드이지만, 브라우저의 여러 스레드를 활용하여 마치 멀티스레드처럼 비동기 작업을 처리하는 것입니다.

여기에서 관련된 더 자세한 설명이 있는 질문 링크를 참고하시면 도움이 될 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

존재하지 않는 일기 url입력 시 alert이 두 번 떠요

0

17

1

useState 직접 구현 부분에서 질문이 있습니다.

1

20

1

학습을 하고 블로그에 정리를 해도 괜찮을까요?

1

23

1

Design a Toast Notification System 미션 관련 질문드립니다.

0

36

1

교재(3쇄)와 강의 내용 문의

0

28

2

섹션2번 부분 강의 화면이 잘 못된것 같아서 문의합니다.

0

23

1

call stack 표현이 잘못표현된것이 아닌가요?

0

64

2

강의자료가 누락됐어요

0

73

2

React 와 Virtual DOM 의 이야기 영상 실행이 안됩니다.

0

34

1

강의 일정 및 수업 자료 공유 관련 문의드립니다!

0

34

1

일반 강의와 차이점?

1

53

1

!= 연산자의 역할

0

35

1

중요하진 않지만 설명하신부분에서 안된부분..

1

37

1

강의 듣는 순서가 어떻게 되나요?

0

49

1

stopPropagation()에 대해서 질문 있습니다.

0

50

2

12.13) 하단 여백 스타일링 관련 질문 드립니다.

0

65

2

27강 Context내 RSC 사용 관련 문의

0

85

3

혹시 다음 강의 제작 예정된 것들이 있을까요?

0

80

1

Enable Linting 항목을 찾을수가 없습니다.

0

46

2

에러 질문드립니다

0

63

2

1강 질문

0

70

2

윈도우에서는동작줄이기가어디에있을까요??

0

34

1

9강하고 11강 동영상이 똑같은데요?

0

174

2

동영상오류인거 같아요

0

99

1