nodejs 设计思想杂记一 reactor模式

本文探讨了Node.js中的Reactor模式,解释了异步IO的本质,包括单进程单线程架构和非阻塞IO。通过示例展示了两种非阻塞IO的实现方法,并重点介绍了Reactort模式的工作原理,强调了libuv在Node.js中的作用,以及它如何实现跨平台的异步操作。
摘要由CSDN通过智能技术生成

开始正题,reactor 模式nodejs关于异步的本质,以及隐藏在此模式背后的故事。如单进程单线程的架构、非阻塞IO。最后看下整个nodejs平台。

IO很慢,相比于CPU的处理速度来说,在非密集型计算的应用场景下,IO是一个拖慢速度的瓶颈。当然,现在正火的深度学习可以一次跑上几个月。。。。这种计算密集型的应用场景下除外。


一个传统的阻塞型io的例子,


线程池中每个线程处理一个链接,上下文切换,读写等待。。。。。性能空闲了很多。


非阻塞IO

立即返回而不是等待数据读写完毕,如果数据读写出错则返回一个预定义的常量。类似于c语言中回调函数。

实现非阻塞IO的方法一:busy-waiting+polling loop

resources = [socketA, socketB, pipeA];
while(!resources.isEmpty()) {
for(i = 0; i < resources.length; i++) {
resource = resources[i];
//try to read
var data = resource.read();
if(data === NO_DATA_AVAILABLE)
//there

Node.js设计模式是一本详细解释了Node.js底层知识和设计方法的书籍。Node.js作为一个基于事件驱动、非阻塞I/O模型的JavaScript运行环境,具有许多独特的设计模式和最佳实践。这本书提供了关于如何使用这些设计模式来构建可扩展和高性能的Node.js应用程序的指导。 在Node.js中,装饰模式是一种通过继承的方式为一个基类对象扩展功能的方法。通过继承基类对象,我们可以在子类中添加新的功能以扩展原有功能。这种模式可以使得代码更具灵活性和可维护性,同时也遵循了面向对象的设计原则。 举个例子来说明装饰模式Node.js中的应用。假设我们有一个基类对象代表一颗圣诞树,一开始它没有任何装饰品。然后,我们可以创建一个装饰器类来继承基类对象,并在子类中添加额外的装饰品功能。通过这种方式,我们可以动态地向圣诞树添加不同的装饰品,而不需要修改基类对象的代码。 在Node.js中实现装饰模式的一种方式是使用util模块的inherits方法来实现继承。我们可以创建一个装饰器类,并在该类中继承基类对象。然后,我们可以在装饰器类中重写基类对象的方法,并在方法中添加额外的功能。 总结起来,Node.js设计模式是一本详细解释了Node.js底层知识和设计方法的书籍。而装饰模式则是一种通过继承的方式为一个基类对象扩展功能的方法,在Node.js中可以使用util模块的inherits方法来实现继承。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [nodejs设计模式](https://download.csdn.net/download/ariflight/10460182)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [《Node.js开发实战详解》学习笔记](https://blog.csdn.net/diankan7855/article/details/101768936)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [NodeJS设计模式(一)](https://blog.csdn.net/It_sharp/article/details/89605464)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值