Node.js 的单线程事件驱动模型和内置的线程池模型

原文:Why Node.js is a single threaded language ?

构建在 node.js 之上的应用程序使用单线程事件循环模型架构来处理多个并发客户端,如 JSP、Spring MVC、http://ASP.NET、HTML、Ajax、jQuery 等。存在其他可以使用的 web 技术,但这些列出的技术遵循“多线程请求-响应”架构来处理多个并发客户端。

单线程:Node JS 平台不遵循多线程请求/响应无状态模型。 它遵循单线程与事件循环模型。 Node JS Processing 模型主要受 JavaScript 基于事件的模型的启发,具有 JavaScript 回调机制。 因此,Node.js 可以轻松处理更多并发客户端请求。事件循环是 Node.js 处理模型的核心,如下图所示。

n = 客户端对 Node.js Web 服务器的请求数。 假设他们同时访问我们构建在 Node.js 之上的 Web 应用程序客户端是 Client-1, Client-2 。 . . 客户端-n。 m = 线程池中的线程数。

Web 服务器接收 Client-1, Client-2 。 . . 直到 Client-n 请求并将它们放入事件队列中。

单线程事件循环相对于多线程请求/响应无状态模型的优势:

  • 可以轻松处理越来越多的并发客户端请求。

  • 由于事件循环,无需创建越来越多的线程。

构建在 node.js 之上的应用程序使用尽可能少的线程来减少内存或资源使用。

node.js 使用单线程事件循环模型架构的原因:

  • 最初,node.js 是作为异步处理的实验而创建的,理论上,在应用程序不使用 CPU 时,在单个线程上进行异步处理可以在典型的 Web 负载下提供比典型的基于线程的实现更高的性能和可扩展性密集的东西,并且可以运行比 Apache 或 IIS 或其他基于线程的服务器多数千个并发连接。

  • node.js 的单线程、异步特性也确实使事情变得复杂,但在设计应用程序所花费的时间、开发成本、死锁、优先级倒置以及所有应用程序的生命周期问题方面,线程比这更糟糕。

  • 对于服务器的每个请求用一个线程来响应的模型还有一个众所周知且备受批评的问题,即与事件循环线程模型相比,它们在多种场景下的扩展性不佳,简而言之,它们缺乏作为应用程序的可扩展性不断增长以满足未来的需求并增加新功能。

由于 Node.js 遵循单线程事件循环模型,其灵感来自 JavaScript 基于事件的模型和 JavaScript 回调机制。因此,node.js 是类似于 JavaScript 的单线程,但不是纯 JavaScript 代码,这意味着像网络调用、文件系统任务、DNS 查找等异步完成的事情实际上并不由主线程处理。

How the single threaded non blocking IO model works in NodeJS ?

示例:如果我们收到来自两个用户 A 和 B 的请求。通过非阻塞 IO,我们可以发起对 A 的请求,然后立即对 B 发起请求,而无需等待对 A 请求的响应。因此我们可以说借助 non -blocking IO 我们可以消除多线程的使用,因为节点服务器可以同时处理多个请求。

Working of single-threaded non-blocking IO:

当客户端向服务器发送请求时,该请求称为事件。 这些所有请求都存储在一个事件队列中。 事件循环中存在的单个线程将此请求分配给内部线程池中存在的线程之一。

该线程读取客户端请求,处理请求,在需要时执行任何阻塞 IO 操作,并准备将最终响应发送回服务器。 事件循环将此响应发送回相应的客户端。

事件循环无限地接收请求并处理它们。

由于事件循环,不需要多个线程。 由于这个事件循环和单线程的概念,node.js 使用更少的资源和内存。

(0)

相关推荐

  • 事件循环 EventLoop(Promise,setTimeOut,async/await执行顺序)

    什么是事件循环?想要了解什么是事件循环就要从js的工作原理开始说起: JS主要的特点就是单线程,所谓单线程就是进程中只有一个线程在运行. 为什么JS是单线程的而不是多线程的呢? JS的主要用途就是与用 ...

  • JS 运行机制

    单线程:js 是单线程的,js在同一时间只能做一件事情这就叫单线程 任务队列:异步过程与单线程本身看起来是冲突的,就是任务队列使这两个不冲突 注意:优先执行同步任务才执行异步任务 同步任务:在js同步 ...

  • 立式加工中心内置电主轴3D模型免费下载,stp通用格式,含内部结构组成

    立式加工中心配置的内置式电主轴,电机直接内置在主轴内,中心镂空,可以给内冷刀具通冷却水,刀具夹紧采用拉刀杆拉紧. 电主轴3D模型是stp通用格式,可以使用SolidWorks.UG.Cero等常见三维 ...

  • JS异步单线程与内置对象面试

    什么是异步? <script> //异步 console.log(1); setTimeout(function(){ alert(2); },1000); console.log(3); ...

  • 快上车!使用 Node.js 搭建一个 API 网关

    编程微刊 1周前 以下文章来源于程序员成长指北 ,作者koala 程序员成长指北专注 Node.js 技术栈分享,从 前端 到 Node.js 再到 后端数据库,祝您成为优秀的高级 Node.js 全 ...

  • 简析 Node.js 特点与应用场景(让你更了解它)

    前端技术优选 今天 以下文章来源于程序员成长指北 ,作者koala 如果你有一定的前端基础,比如 HTML.CSS.JavaScript.jQuery:那么,Node.js 能让你以最低的成本快速过渡 ...

  • JavaScript 事件循环:从起源到浏览器再到 Node.js

    冰森 前端技术优选 今天 很多文章都在讨论事件循环 (Event Loop) 是什么,而几乎没有人讨论为什么 JavaScript 中会有事件循环.博主认为这是为什么很多人都不能很好理解事件循环的一个 ...

  • 看了就会的 Node.js 三大基础模块常用 API

    技术漫谈 4月11日 以下文章来源于前端试炼 ,作者小炼

  • 字节跳动最爱考的前端面试题:Node.js 基础

    前端技术优选 今天 前几天,跟我一朋友聊天,他现在是阿里的架构师,说:「他们根本不知道,现在的电商大促有多么依赖 Node.js.」 说真的,我倒并不意外.作为一个定位明确的高性能 Web 服务器,N ...

  • 成为自信的node.js开发者(一)

    原创 雾豹 前端技术优选 今天 作者:雾豹 原文地址:https://juejin.im/post/5c6a780451882561dd7b65d6 适合阅读的同学 想更进一步深入理解node的同学, ...

  • 成为自信的node.js开发者(二)

    成为自信的node.js开发者(二) 原创 雾豹 前端技术优选 今天 前端技术优选 为你精选前端领域优质技术博文,欢迎关注. 60篇原创内容 公众号 点击上方关注 前端技术优选,一起学习,天天进步 作 ...