이 글은 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引擎
libuv
를 기반으로 합니다. Node의 기본 모듈에도 몇 가지 차단 방법이 있습니다. 그러나 Node는 해당 비동기 버전의 API도 제공합니다. libuv란 무엇인가요? 여러 플랫폼을 지원하는 비동기 I/O 작업을 위한 라이브러리입니다. 자세한 내용은 공식 홈페이지를 참고해주세요: https://libuv.org/
먼저 노드에 국한되지 않는 맥락에서 논블로킹(비동기)을 달성하는 방법에 대해 생각해 보세요. 1) 동시 작업을 처리하기 위해 여러 스레드를 열 수 있습니다.🎜🎜2) 이벤트 루프 모드, 이벤트 큐에 비동기 작업이 있는 경우 비동기 작업이 끝난 후 해당 콜백 함수 비동기 반환 결과 처리라고 합니다🎜🎜Node.js는 단일 스레드입니다. 그 이유는 Node.js의 외부 계층이 JavaScript로 구현되고 JavaScript의 해석 및 실행이Node에서 Non-Blocking이란 무엇인가요?
V8 엔진을 통해 수행되기 때문입니다. 코드>. 🎜🎜JS 실행은 단일 스레드이므로 JS 해석 및 실행 중에 해석 및 실행을 위해 다른 스레드를 여는 것이 불가능합니다. 따라서 Node.js는 비차단(비동기 작업)을 달성하기 위해 두 번째 방법을 사용합니다. 🎜🎜🎜Node🎜🎜🎜🎜영어 원본 주소: https://nodejs.org/en/docs/guides/blocking-vs-non-blocking/🎜🎜🎜더 보기 프로그래밍 관련 지식을 보려면 🎜프로그래밍 비디오🎜를 방문하세요! ! 🎜
위 내용은 Nodejs의 차단 및 비차단에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!