Web开发

首页 » 常识 » 预防 » web前端开发nodejs基本原理前端
TUhjnbcbe - 2023/4/15 17:50:00
北京中科医院坑 http://m.39.net/baidianfeng/a_5154120.html

一.nodejs背景

先来说说nodejs最常被提到的几个关键词,“单线程”,“非阻塞异步IO”,“事件循环”。接下来主要来通过这几个关键字总结一下nodejs的内在原理,以及引申出的一些问题。

二.nodejs是单线程吗?

如果说nodejs是单线程语言,可以想象一下,一个单实例的nodejs的服务器同时接受个用户请求时,第个用户的请求要等前面99的用户处理完成才能得到处理,如果每个用户的请求要0.3秒,第个用户需要30秒的等待,这显然和我们的实际情况并不符合,所以说,nodejs并不是单纯的单线程。

那为什么说nodejs是单线程语言呢?而是因为nodejs中javascript代码的执行是单线程,怎么理解这句话,看下面代码。

console.log(javascriptstart);

setTimeout(()={

console.log(javascriptsetTimeout);

},);

constnow=Date.now();

while(Date.now()now+){}

console.log(javascriptend);

执行结果:

$nodeindex.js

javascriptstart

javascriptend

javascriptsetTimeout

上面的代码中,setTimeout的回调代码在while执行4秒期间,计时器已经是过了两秒的,而javascriptsetTimeout这一句打印却在javascriptend之后,即使计时器在两秒后回调代码应该被执行时,因为javascript的线程处于非空闲状态,而不能输出javascriptsetTimeout,javascript代码是单线程这样理解。

三.nodejs的异步IO

再拿上面的例子来看,当个用户请求同时被接受到时,当需要IO(网络IO/文件IO)操作时,单线程的javascript并不会停下来等待IO操作完成,而是“事件驱动”开始介入,javascript执行线程继续执行未完的javascript代码,当执行完成后该线程处于空闲状态,可以看下面这一段代码示例。

//

1
查看完整版本: web前端开发nodejs基本原理前端