<返回更多

理解Nodejs(V8)和Spring Webflux(Netty)——基于Event Loop设计

2022-06-27    老傅解码
加入收藏
理解Nodejs(V8)和Spring Webflux(Netty)——基于Event Loop设计

 

在过去的五个月里,我一直在我当前的项目中使用 Spring Webflux,我还编写了很多 Nodejs 应用程序,并且使用 Promise 样式编码(async/await)的方式也几乎相同,而 Webflux 使用 Mono/Flux。

Nodejs 和 Spring Webflux 之间的区别是什么,因为它们都在解决同一个问题,专注于事件循环。

Node.js 是一个构建基于 Chrome V8 JAVAScript 引擎的事件驱动服务器应用程序的平台。

.NETty 是一个事件驱动的框架,用于在 Java 平台上构建服务器应用程序。

 

让我们看看基于以下几点的比较,了解设计方法和内部发生了什么不同之处?

线程模型

在决定任何框架之前,需要了解线程建模。

Nodejs:

理解Nodejs(V8)和Spring Webflux(Netty)——基于Event Loop设计

 

理解Nodejs(V8)和Spring Webflux(Netty)——基于Event Loop设计

 

从左到右,从上到下,Node.js 被分为了四层,分别是 应用层、V8引擎层、Node API层 和 LIBUV层。

应用层: 即 JavaScript 交互层,常见的就是 Node.js 的模块,比如 http,fs

V8引擎层: 即利用 V8 引擎来解析JavaScript 语法,进而和下层 API 交互

NodeAPI层: 为上层模块提供系统调用,一般是由 C 语言来实现,和操作系统进行交互

LIBUV层: 是跨平台的底层封装,实现了 事件循环、文件操作等,是 Node.js 实现异步的核心

Node.js在主线程维护了一个事件队列,接收到请求后,就将该请求作为一个事件放入Event Queue中,然后继续接受其他请求,当主线程空闲(没有请求接收) 的时候,就开始轮询事件队列

Webflux:

理解Nodejs(V8)和Spring Webflux(Netty)——基于Event Loop设计

 

异步操作

Nodejs:

理解Nodejs(V8)和Spring Webflux(Netty)——基于Event Loop设计

 

Webflux:

理解Nodejs(V8)和Spring Webflux(Netty)——基于Event Loop设计

 

事件循环结构

Nodejs:

理解Nodejs(V8)和Spring Webflux(Netty)——基于Event Loop设计

 

Webflux:

事件循环中的任务调度

Nodejs:

Webflux:

CPU 利用率

Nodejs:

Webflux:

调整线程池

Nodejs:

Webflux:

处理背压问题

软件系统中的背压是使流量通信过载的能力。换句话说,信息流的生产速度超过消费速度。

Nodejs:

webflux:

基于以上几点,我认为没有一个比另一个更好,因为两者都有一些优点和缺点。但在大多数方面,它们在性能方面是相同的。因此,可以根据技能可用性、团队技术方向、项目生态系统等来做出决定。

声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>