Node.js和JS的运行机制的区别

JS运行机制:

 js运行机制(即事件循环机制):js是单线程执行的,这意味着同一时间内只能做一件事,但这并不是说单线程就会阻塞,而要实现单线程且非阻塞的方法就是事件循环机制

1、事件循环机制(EventLoop)

在js中,会把任务分为同步任务和异步任务,这两者的执行环境不同,同步任务会进入主线程,异步任务会进入事件队列(EventQueue),当主线程代码执行完毕后,会去事件队列中读取对应的异步任务,并推到主线程中执行,不断重复过程,称为事件循环机制(EventLoop)

2、js的任务分类

js中将任务分为同步任务异步任务两大类

同步任务:只要被系统扫描到,就会被主线程马上执行的任务(优先于所有的异步任务

异步任务:即使被扫描到,也不会马上执行,会被放到事件队列中,等主线程任务执行完毕,系统才会召回执行

3、异步任务分类

异步任务又被分为宏任务微任务
在异步任务中,有些异步任务的平均执行周期很长,这些任务就被JavaScript标记为宏任务(比如延时器setTimeout())。而平均执行周期相对较短的任务,被称为微任务(如promise.then())

Node.js运行机制:

1、概念:

Nodejs是一种基于Chrome V8引擎的JavaScript运行环境,它允许开发者使用JavaScript语言编写服务器端的应用程序。

Node.js采用了事件驱动、非阻塞I/O模型,使得它在处理大量并发请求时表现出色。

2、单线程与事件循环

Nodejs采用单线程模型来处理请求,这意味着它只使用一个线程来处理所有的请求。这与传统的多线程模型不同,多线程模型需要为每个请求创建一个新的线程,而单线程模型则只需要一个线程即可。

Nodejs的单线程模型并不意味着它只能处理一个请求,它实际上是通过事件循环来处理并发请求的。事件循环是Nodejs的核心机制之一,它负责接收请求、执行回调函数、处理I/O操作等。事件循环的基本流程如下:

1.执行全局代码,初始化运行环境。

2.进入事件循环,等待事件触发。

3.当有事件触发时,执行相应的回调函数。

4.回调函数执行完成后,事件循环继续等待下一个事件。

3、非阻塞I/O

Nodejs的非阻塞I/O模型是实现高并发能力的关键。在传统的阻塞I/O模型中,当一个V/O操作发生时,线程会被阻塞,直到该操作完成后才能继续执行后续代码。而在非阻塞I/O模型中,当一个I/O操作发生时,线程不会被阻塞,而是继续执行后续代码,当I/O操作完成后,通过回调函数来处理操作结果。

非阻塞I/O模型的好处是能够充分利用系统资源,提高系统的并发处理能力。在Node.js中,通过使用回调函数来处理I/O操作的结果,可以避免线程被阻塞,从而实现高并发处理。

4、事件驱动

Node.js的事件驱动机制是基于观察者模式的。在Nodejs中,事件是由事件触发器(EventEmitter)来发出的,而事件监听器(Listener)则负责接收并处理这些事件。

在Nodejs中,可以使用`on`方法注册事件监听器,当事件触发时,注册的回调函数就会被调用。通过事件驱动机制以实现模块之间的解耦,提高代码的可维护性和可扩展性。

5、模块化

Nodejs支持模块化开发,可以将代码划分为多个模块,每个模块负责处理特定的功能。模块化开发可以降低代码的耦合度,提高代码的可重用性。

在Node,js中,可以使用 require 函数来引入其他模块,通过 module.exports 来导出模块。这样,不同的模块之间可以通过引入和导出来共享数据和功能。

6、异步编程

由于Nodejs采用了非阻塞I/O模型,因此在编写Node.js应用程序时需要注意处理异步操作。异步编程是Node.js中的一个重要概念,它可以有效地处理I/O操作,提高系统的并发处理能力。

在异步编程中,可以使用回调函数、Promise、async/await等方式来处理异步操作。通过合理使用异步编程,可以避免阻塞线程,提高代码的性能和响应速度。

7、总结

Node.js的运行机制是基于单线程、事件循环和非阻塞I/O模型的。它通过事件驱动和异步编程来实现高并发处理能力。Nodejs的模块化机制可以将代码划分为多个模块,提高代码的可维护性和可重用性。通过深入理解Node.js的运行机制,我们可以更好地开发高性能的服务器端应用程序。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小奋斗♛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值