인프런 커뮤니티 질문&답변

공태성지능으로고상언짓하기님의 프로필 이미지
공태성지능으로고상언짓하기

작성한 질문수

[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지

노드의 특성

논 블로킹 방식의 동작 원리 이해가 어렵습니다.

작성

·

109

0

강의 교안의 논 블로킹의 정의

image.png

와 책의 예제(setTimeout 함수를 이용해 작업 시간이 긴 함수를 백그라운드로 보냄)를 읽어 보면

오래 걸리는 함수를 백그라운드로 보내는 것 같은데, 그 다음 설명을 보면

image.png

일부 코드들이 백그라운드에서 병렬로 실행된다고 되어있어서 헷갈립니다.

위 내용을 바탕으로 제가 이해한 것은

  • 작업 시간이 긴 함수, 일부 코드 모두 백그라운드로 전달

  • 작업 시간이 긴 함수는 태스크 큐로 전달되고 동시 작업이 가능한 일부 코드들은 백그라운드에서 병렬로 처리

  • 일부 코드들의 병렬 처리가 끝나고 나면 태스크 큐에 있는 (블로킹 방식의)작업 시간이 긴 함수 처리

인데 맞을까요?

답변 2

0

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

네 맞습니다. 작업 시간이 긴 함수가 순수히 JS로만 구성되어 있다면 setTimeout이나 Promise로 태스크 큐로 넘길 수 있습니다.

일부 코드들의 병렬처리보다 태스크 큐에 있는 작업 시간이 긴 함수 처리가 더 먼저 진행됩니다. 백그라운드에서 병렬처리가 끝난 후에야 태스크 큐에 등록됩니다.

일부 코드들의 병렬처리보다 태스크 큐에 있는 작업 시간이 긴 함수 처리가 더 먼저 진행됩니다.

에서 더 먼저 진행된다는 것의 의미가 무엇인가요? 저는 작업 시간이 긴 함수가 먼저 실행되지 않기 위해 논 블로킹 방식을 이용한다고 이해했는데, 그럼 이 말은

만약~ 태스크 큐에 보내지지 않으면 병렬 처리 전에 작업 시간이 긴 함수를 먼저 처리한다는 의미인가요??

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

지금 병렬처리될 수 있는 코드와 작업시간이 긴 JS 함수를 동시에 생각하시는 것 같은데, 저는 예시를 그렇게 든 적이 없긴 합니다.

  1. 코드 중에는 병렬처리될 수 있는 코드가 있다.

  2. 태스크 큐로 보내는 방식으로 작업시간이 긴 함수의 실행을 뒤로 미룰 수 있다.

이게 제가 설명한 것 전부이고요. 1,2가 동시에 일어나는 상황에서의 실행 순서는 코드에 따라 다릅니다. 일반적인 경우 1,2가 동시에 시작했다면 2가 먼저 실행되고 1이 실행됩니다.

실행이라고 함은, JS단에서 처리가 완료되는 것을 의미합니다.

뭔가 제 개념에 문제가 있는 것 같은데 더 깊이 들어가지 않고 마지막으로 답변주신 내용대로 외우고 있겠습니다.. ㅜㅜ

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

네 저 일부 코드가 뭔지만 외우고 계시면 됩니다. 백그라운드로 보내는 코드랑요.

0

안녕하세요, 인프런 AI 인턴입니다.

논 블로킹(Non-blocking) 방식에 대한 근본적 이해를 돕기 위해서, 관련된 기존 질문과 답변 링크들을 찾아보았습니다. 논 블로킹 방식의 동작 원리와 관련하여 질문자님께서 제시한 내용과 유사한 주제에 대한 질문과 답변을 아래에서 참고하실 수 있습니다.

노드(Node.js)에서 논 블로킹(Non-blocking) 방식은 오래 걸리는 작업(예: 파일 시스템 접근, 네트워크 요청 등)을 처리할 때 사용되는 모델입니다. 이 모델의 핵심은 오래 걸리는 작업을 백그라운드에서 처리하도록 보내고, 작업이 완료되면 그 결과를 콜백 함수나 프로미스(Promise)를 통해 전달받는 것입니다. 이를 통해, 메인 스레드는 다른 요청을 계속 처리할 수 있어 애플리케이션이 멈추지 않고, 더 많은 요청을 동시에 처리할 수 있게 됩니다.

답변 링크:
1. 논블로킹과 이벤트 루프 - 이 답변은 백그라운드에서 처리되는 작업들(예: setTimeout)이 실제 어떻게 동시에 처리되는지에 대한 설명을 포함하고 있습니다. 자바스크립트 코드가 돌아가는 쓰레드는 하나뿐이지만 백그라운드에서는 여러 쓰레드를 사용할 수 있다고 언급하고 있습니다.

  1. node에서 말하는 non-blocking에 대한 개념 문의 - 논 블로킹은 오래 걸리는 함수를 백그라운드로 보내는 방식으로 설명되어 있는데, 이 과정에서 node.js가 어떻게 논 블로킹 I/O를 처리하는지에 대한 자세한 설명이 포함됩니다.

  2. 비동기 코드 질문 - 이 부분은 setTimeout과 같은 비동기 코드가 백그라운드에서 어떻게 작동하는지를 포함하여 이벤트 루프와 태스크 큐의 관계를 설명합니다.

위 링크들은 논 블로킹 방식의 동작 원리에 대한 질문자님의 이해를 돕기 위해 추천되었습니다. JavaScript의 비동기 처리 모델이 Node.js에서 어떻게 활용되는지에 대한 기본적인 설명을 담고 있으니 참고하시면 좋을 것 같습니다.

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

공태성지능으로고상언짓하기님의 프로필 이미지
공태성지능으로고상언짓하기

작성한 질문수

질문하기