>  기사  >  웹 프론트엔드  >  Nodejs의 차단 및 비차단에 대한 자세한 설명

Nodejs의 차단 및 비차단에 대한 자세한 설명

青灯夜游
青灯夜游앞으로
2021-05-18 10:23:322284검색

이 글은 Nodejs의 차단 및 비차단을 이해하는 데 도움이 될 것입니다. 도움이 필요한 친구들이 모두 참고할 수 있기를 바랍니다.

Nodejs의 차단 및 비차단에 대한 자세한 설명

추천 학습: "nodejs 튜토리얼"

모든 사람은 차단과 비차단의 두 가지 개념을 어느 정도 이해해야 합니다.

간단히 말하면 차단은 대부분 동기 모드로 인해 발생합니다. 블로킹은 시간이 많이 걸리는 작업을 처리하는 비동기 모드로 이해될 수 있습니다

그렇다면 Node.js에서는 블로킹과 비블로킹을 어떻게 설명할까요? 다음은 이 문제를 주로 설명합니다.

노드에서 차단이란 무엇입니까?

I/O 작업은 주로 시스템 디스크와의 상호 작용(데이터 읽기 및 쓰기)이나 네트워크 요청 등을 의미하는 것으로 이해될 수 있습니다.

Blocking은 다른 JS 코드의 실행이 이전 시간까지 기다려야 함을 의미합니다. I/O 작업을 소비하거나 일부 네트워크 요청이 완료되었습니다. Node에는 이 문제를 해결하기 위해 이벤트 루프가 있기 때문에 js 실행 중에 이벤트 루프가 켜지지 않으면 실제로 차단이 발생합니다. I/O操作或者一些网络请求等完成之后。因为Node存在事件循环来解决这个问题,那假如说js再执行的过程中,事件循环没有被开启,其实就会造成阻塞的情况发生。

其实在Node.js中正常情况下也是存在被阻塞的情况,原因是Node的异步处理针对于I/O操作比较友好【利用事件循环】,但是对于JavaScript可能存在的一些CPU密集型的操作性能就比较低。有的同学可能会说,为什么CPU密集型的操作Node.js不能够异步支持呢?因为可以理解这些CPU密集型操作,其实都是一些同步代码,比如大量的for循环,海量的数据计算等。

Node.js的标准库中也存在一些同步的方法,这些方法大部分都是基于libuv来实现阻塞的效果。Node的原生模块中也存在一些阻塞方法。不过同时Node也会提供对应的异步版本的API。

什么事libuv呢? 是一个支持多平台的针对于异步I/O操作的库。 详细可见官网:https://libuv.org/

Node中什么是非阻塞呢?

首先思考一下在不局限于Node的背景之下如何实现非阻塞(异步)呢?

简单说两个:

1)可以开多个线程去处理并发的操作

2)事件循环的模式,如果有异步操作放在事件队列中,异步操作结束之后,调用对应的回调函数处理异步返回结果

Node.js是单线程的,原因是:Node.js外层是由JavaScript实现的,JavaScript的解释执行是通过V8引擎

실제로 Node.js에는 일반적인 상황에서 차단 상황이 발생합니다. 그 이유는 Node의 비동기 처리가 [이벤트 루프를 사용하는] I/O 작업에 더 친숙하지만 JavaScript에 존재할 수 있는 일부 CPU 집약적인 작업의 경우입니다. 성능이 상대적으로 낮습니다. 일부 학생들은 Node.js가 CPU 집약적인 작업을 비동기식으로 지원할 수 없는 이유가 무엇인지 묻습니다. 이러한 CPU 집약적 작업은 실제로 다수의 for 루프, 대규모 데이터 계산 등과 같은 일부 동기 코드라는 것을 이해할 수 있기 때문입니다.

Node.js의 표준 라이브러리에도 몇 가지 동기화 방법이 있는데, 대부분은 차단 효과를 얻기 위해 libuv를 기반으로 합니다. Node의 기본 모듈에도 몇 가지 차단 방법이 있습니다. 그러나 Node는 해당 비동기 버전의 API도 제공합니다.

libuv란 무엇인가요? 여러 플랫폼을 지원하는 비동기 I/O 작업을 위한 라이브러리입니다. 자세한 내용은 공식 홈페이지를 참고해주세요: https://libuv.org/

Node에서 Non-Blocking이란 무엇인가요?

먼저 노드에 국한되지 않는 맥락에서 논블로킹(비동기)을 달성하는 방법에 대해 생각해 보세요.

간단히 말하면:

1) 동시 작업을 처리하기 위해 여러 스레드를 열 수 있습니다.🎜🎜2) 이벤트 루프 모드, 이벤트 큐에 비동기 작업이 있는 경우 비동기 작업이 끝난 후 해당 콜백 함수 비동기 반환 결과 처리라고 합니다🎜🎜Node.js는 단일 스레드입니다. 그 이유는 Node.js의 외부 계층이 JavaScript로 구현되고 JavaScript의 해석 및 실행이 V8 엔진을 통해 수행되기 때문입니다. 코드>. 🎜🎜JS 실행은 단일 스레드이므로 JS 해석 및 실행 중에 해석 및 실행을 위해 다른 스레드를 여는 것이 불가능합니다. 따라서 Node.js는 비차단(비동기 작업)을 달성하기 위해 두 번째 방법을 사용합니다. 🎜🎜🎜Node🎜🎜🎜🎜영어 원본 주소: https://nodejs.org/en/docs/guides/blocking-vs-non-blocking/🎜🎜🎜더 보기 프로그래밍 관련 지식을 보려면 🎜프로그래밍 비디오🎜를 방문하세요! ! 🎜

위 내용은 Nodejs의 차단 및 비차단에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 juejin.cn에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제