我的编程空间,编程开发者的网络收藏夹
学习永远不晚

快速掌握Node.js事件驱动模型

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

快速掌握Node.js事件驱动模型

一、传统线程网络模型

在了解Node.js事件驱动模型之前,我们先了解一下传统的线程网络模型,请求进入web服务器(IIS、Apache)之后,会在线程池中分配一个线程来线性同步完成请求处理,直到请求处理完成并发出响应,结束之后线程池回收。

这就会就会带来以下几个问题 :

1.由于线程池中线程个数有限,对于频繁请求时,就会出现等待,严重的甚至会把服务器挂掉

2.对于高并发的时候,为了防止出现脏数据就会使用锁来解决,一些I/O事务可能消耗很长得时间,这样就会出现一些线程等待,效率低下

查看图片

二、事件驱动模型

1.在Node.js中有一个事件队列,每个任务都会放入事件队列中,都会留下处理结果的回调函数,事件循环线程(个人感觉有点类似ios中的RunLoop)处理事件队列中的任务,直到回调函数不再存在。

2. 在无阻塞的情况下,作为一个带有回调的函数被放入事件队列中,事件循环线程中被提取并执行。

3.当执行过程中遇到I/O阻塞(读取文件、查询数据库、请求套接字、访问远程服务等)时,事件循环线程不会停下等待结果,转而继续执行队列中的下一个任务,不会在事件循环线程中执行。在函数执行时,Node.js在事件队列中放置回调函数,它的顺序根据函数的完成快慢决定。

查看图片

4.在1中也说了当遇到I/O阻塞,循环线程不会等待结果,转而执行队列中的下一个任务,那是该由谁来执行这个I/O操作呢?

Node.js使用事件回调来避免对阻塞I/O的等待,在后台实现线程池,当遇到I/O阻塞任务时,会从线程池中获取一个线程,将该函数及回调在那里执行,在被阻塞的线程上执行的回调函数仍然可以把事件添加到事件队列中。

查看图片

以上就是关于Node.js事件驱动模型的全部内容,希望对大家的学习有所帮助。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

快速掌握Node.js事件驱动模型

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

快速掌握Node.js事件驱动模型

一、传统线程网络模型 在了解Node.js事件驱动模型之前,我们先了解一下传统的线程网络模型,请求进入web服务器(IIS、Apache)之后,会在线程池中分配一个线程来线性同步完成请求处理,直到请求处理完成并发出响应,结束之后线程池回收。
2022-06-04

探索 Node.js EventEmitter:掌握事件驱动的编程范例

Node.js EventEmitter 是一个强大的事件驱动的编程范例,它允许开发者轻松处理应用程序中的事件。了解 EventEmitter 的机制和用法对于掌握 Node.js 的异步编程至关重要。
探索 Node.js EventEmitter:掌握事件驱动的编程范例
2024-02-19

快速掌握Node.js模块封装及使用

Node.js中也有一些功能的封装,类似C#的类库,封装成模块这样方便使用,安装之后用require()就能引入调用. 一、Node.js模块封装1.创建一个名为censorify的文件夹2.在censorify下创建3个文件censort
2022-06-04

Django signals:掌握事件驱动的编程

Django signals 可以让你在模型事件发生时触发自定义代码,从而实现更复杂的应用程序行为。Signals 提供了一种灵活的方式来扩展 Django 的功能,并允许你在不修改核心代码的情况下添加自己的业务逻辑。
Django signals:掌握事件驱动的编程
2024-02-16

JavaScript观察者模式:深入剖析,掌握事件驱动的艺术

JavaScript观察者模式是一种设计模式,它允许对象在不了解其他对象的情况下相互通信。这使得它们非常适合于构建松散耦合的系统,这些系统可以独立于彼此更改。
JavaScript观察者模式:深入剖析,掌握事件驱动的艺术
2024-02-03

Redis的事件驱动模型是什么

这篇文章主要讲解了“Redis的事件驱动模型是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Redis的事件驱动模型是什么”吧!为什么 Redis 不使用基本的 Socket 编程模型?
2023-06-30

JavaScript 原型模式的捷径:快速掌握其使用技巧

JavaScript 原型模式是一种简单而强大的设计模式,允许您通过从现有对象创建新对象来创建对象。它可以轻松地创建和使用对象,并可以提高代码的可重用性。
JavaScript 原型模式的捷径:快速掌握其使用技巧
2024-02-06

Node.js Serverless 架构模式:单片、微服务和事件驱动

探讨 Node.js Serverless 架构模式的单片、微服务和事件驱动,以了解每种模式的优缺点并选择最适合您的应用程序的模式。
Node.js Serverless 架构模式:单片、微服务和事件驱动
2024-02-21

Node.js 事件驱动架构与其他异步编程模型的对比:优缺点一览无遗

Node.js 的事件驱动架构是一种异步编程模型,它允许开发者在不阻塞主线程的情况下处理多个请求。本文将对 Node.js 的事件驱动架构与其他异步编程模型进行比较,以帮助开发者更好地理解 Node.js 的优势和局限性。
Node.js 事件驱动架构与其他异步编程模型的对比:优缺点一览无遗
2024-02-07

C++并发编程:如何实现基于事件驱动的并发模型?

基于事件驱动的并发模型是 c++++ 中一种流行的并发编程范式,它使用事件循环处理来自不同来源的事件。事件循环是一个无限循环,检索和处理事件队列中的事件,通常通过调用回调函数。在 c++ 中,可以使用 libevent 或操作系统 api
C++并发编程:如何实现基于事件驱动的并发模型?
2024-05-06

Node.js 事件驱动编程与设计模式:运用设计模式提升代码可维护性

Node.js 的事件驱动编程模型与设计模式相得益彰,通过采用设计模式,可显著提升代码的可维护性、可扩展性和可重用性。
Node.js 事件驱动编程与设计模式:运用设计模式提升代码可维护性
2024-03-05

编程热搜

目录