4-异步:非阻塞IO

news2024/11/14 19:50:26

4-异步:非阻塞I_O

简介

什么是Node.js的非阻塞I/O

  • I/O 即 Input/Output. 也就是一个系统的输入和输出
  • 阻塞I/O和非阻塞I/O的却别就在于系统接收输入再到输出期间,能不能接收其他输入

对于这两句话的理解,可以把系统比作服务员,阻塞I/O类型的服务员是同一时间只能只能完整处理一个人的业务,处理完一个人后,才会到下一个人;非阻塞I/O类型的服务员则是可以先让客户预定,且预定完后,可以有精力去办理另一个人的预定,如果某个客户预定业务完成,就再去通知客户即可。
这样看来非阻塞I/O的服务员的运作模式更符合现在数量多的客户群体,阻塞I/O则相反。

更简单的理解,比如你遇到一个难解的问题,在线上进行了提问,提问后等待回答的过程中,如果你因为这个问题没得到解答前无法开展其它工作,那么这就是阻塞I/O,如果你可以先去做其它的工作,那么就是非阻塞I/O。

注意:在服务员和客户的例子中,存在一个问题,如果服务员数量少,客户多,服务员处理不过来,也会造成业务的阻塞,因此,看待阻塞和非阻塞问题,应该从宏观上来看,关注点不是在处理业务这个步骤,而应该是关注在接受业务-等待业务处理-业务处理完成这个流程,在这个流程中,等待业务处理时,服务员是否可以去处理其它业务就是判断阻塞和非阻塞的重要依据。

线程方式理解NodeJs

回到在NodeJs内置模块中提到的这幅 NodeJs 系统图。

在上面理解了非阻塞和阻塞I/O的概念后,我们可以把这幅图按照线程的模式进行划分区域。

如下图,左边部分是 node.js 线程,右边部分是 其它 c++ 线程,当我们左边的应用代码工作时,就是在 node.js 线程中运行,如果使用到了node.js 中的 I/O 操作(node.js 中所有 I/O 操作都是非阻塞的),就需要将该操作放到右边其它 c++ 的线程进行执行,执行后将结果又返回左边 node.js 线程中进行使用即可。

因此,按照线程的模式就可以划分为 node.js 线程 和 c++ 线程。

而且,在 node.js 底层非阻塞的实现也是通过线程来实现的。
image.png
注意:异步 和 非阻塞I/O 不是同一个东西,异步是指一种编程的方式,非阻塞 I/O 是一个底层机制的名字。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/181769.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

React 实现自动上报 PV/Click 的埋点 Hooks

自定义 hooks 是基于 React Hooks 的一个拓展,我们可以根据业务需求制定满足业务需要的组合 hooks,更注重的是逻辑单元。怎样把一段逻辑封装起来,做到复用,这才是自定义 hooks 的初衷。 自定义 hooks 也可以说是 React Hooks 的聚…

【并发编程十三】c++原子操作

【并发编程十三】c原子操作一、改动序列1、改动序列2、预测执行二、原子操作及其类别1、原子操作2、非原子操作3、原子类型三、标准原子类型1、标准原子类型的两种实现方式2、原子操作的用途3、原子操作的宏四、操作std:atomic_flag1、简介2、使用说明3、使用std:atomic_flag实…

Kettle(16):Kitchen作业执行引擎

在Linux中对Kettle做Linux配置(和Windows相同,添加驱动jar包) 上传以后需要重启。 1 在Windows中开发作业 2 配置Start组件 3 配置转换组件 修改Kettle&

【HBase——陌陌海量存储案例】1.案例介绍与HBase表结构设计(上)

前言 本系列接【HBase入门】系列文章后实战案例的学习。 学习目标 能够掌握HBase表结构设计(表设计、ROWKEY设计、预分区) 能够安装部署Apache Phoenix 能够掌握Phoenix的基本操作 能够掌握使用Phoenix建立二级索引提升性能 能够基于Phoenix JDBC API编…

Ubuntu安装ROS(每个步骤图文详细)

Ubuntu安装ROS(每个步骤图文详细)前言(推荐安装)ROS对应的Ubuntu的版本换源安装ROS一、添加ROS软件源二、添加密钥三、安装ROS-melodic四、初始化rosdep可能出现的问题:一 、 **sudo: rosdep:找不到命令**二…

算法_位运算x(-x)和x(x-1)

最近在跟着y总学算法。 今天学到了两个很经典的位运算,x&(-x)和x&(x-1): x&(-x):保留二进制下最后出现的1的位置,其余位置置0(即一个数中最大的2的n次幂的因数 x&(x-1):消除二进制下最后…

SpringCloud整合Zookeeper代替Eureka

目录 一、注册中心Zookeeper 二、服务提供者 三、服务消费者 一、注册中心Zookeeper zookeeper是一个分布式协调工具,可以实现注册中心功能 关闭Linux服务器防火墙后启动zookeeper服务器 zookeeper服务器取代Eureka服务器,zk作为服务注册中心 Lin…

ORA-600 kcbzpbuf_1故障恢复----惜分飞

数据库启动报错ORA-03113SQL> startup;ORACLE instance started. Total System GlobalArea 5.1310E10 bytesFixed Size 2265224 bytesVariable Size 1.8119E10 bytesDatabaseBuffers 3.3152E10 bytesRedo Buffers 36069376 bytesDatabasemounted. ORA-03113: end-of-file on…

二叉树的层序遍历

二叉树的层序遍历 层序遍历一个二叉树。就是从左到右一层一层的去遍历二叉树。 需要借用一个辅助数据结构即队列来实现,队列先进先出,符合一层一层遍历的逻辑,而用栈先进后出适合模拟深度优先遍历也就是递归的逻辑。 而这种层序遍历方式就是…

Java:基于XML的Spring使用

基于XML的Spring使用一、Spring IOC 底层实现1.1 BeanFactory与ApplicationContexet1.2 图解IOC类的结构二、 Spring依赖注入数值问题【重点】2.1 字面量数值2.2 CDATA区2.3 外部已声明bean及级联属性赋值2.4 内部bean2.5 集合三、 Spring依赖注入方式【基于XML】3.1 set注入3.…

白炽灯护眼还是LED护眼?盘点专业护眼的LED护眼灯

目前大多数家庭都会购买台灯使用,选择白炽灯还是LED灯呢?建议是LED灯更护眼。白炽灯缺点:耗电、发光效率低、温度过高不安全。白炽灯优点:体积小、显色能力好。LED灯缺点:价格较高、显色能力比白炽灯弱一些。LED灯优点&#xff1a…

JDBC(powernode CD2206)详尽版(内含教学视频、源代码、SQL文件)

JDBC(powernode CD2206)详尽版(内含教学视频、源代码、SQL文件) 包含:教学视频、源代码(与博客同步)、SQL文件 下载链接地址: https://download.csdn.net/download/weixin_4641135…

使用kubebuilder开发operator详解--踩坑记录

跟着教程:使用kubebuilder开发operator详解出现: 国内无法访问该ip,需要设置go env: go envGOPROXYhttps://goproxy.c 查看go env: 修改镜像后仍然无法解决:借鉴该问题https://github.com/goproxy/goprox…

springboot-druid数据源的配置方式及配置后台监控-自定义和导入stater(推荐-简单方便使用)两种方式配置druid数据源

springboot-druid数据源的配置方式及配置后台监控-自定义和导入stater(推荐-简单方便使用)两种方式配置druid数据源druid数据源自定义配置druid数据源1.引入依赖2.配置自定义dataSoruce的Bean组件3.测试sql,验证数据源是否配置成功4.开启 StatFilter,wal…

哈希的应用 -- 布隆过滤器

作者:小萌新 专栏:C进阶 作者简介:大二学生 希望能和大家一起进步! 本篇博客简介:介绍并模拟实现哈希的应用 – 布隆过滤器 布隆过滤器布隆过滤器的提出布隆过滤器的概念布隆过滤器的实现框架与算法插入函数查找函数删…

JVM学习(五):JVM运行时参数

一、JVM参数选项1.1 标准参数选项标准参数选项的特点是以-开头,比较稳定,后续版本基本不会变化也就是在命令行输入java 或 java -help之后显示的参数,其中选项包括:-d32 使用 32 位数据模型 (如果可用)-d64 使用 64 位数据模型 (如果可用)-…

Spring Security in Action 第十章 SpringSecurity应用CSRF保护和CORS跨域请求

本专栏将从基础开始,循序渐进,以实战为线索,逐步深入SpringSecurity相关知识相关知识,打造完整的SpringSecurity学习步骤,提升工程化编码能力和思维能力,写出高质量代码。希望大家都能够从中有所收获&#…

分布式链路追踪SkyWalking快速入门之环境安装界面指标介绍(一)

目录 一、先抛几个分布式常见的问题 二、分布式链路追踪Skywalking介绍 2.1 Skywalking是什么 2.2 市场上同类解决方案 2.3 skywalking的性能对比 三、Apache Skywalking特点和整体架构组件介绍 3.1 Skywalking特点 3.2 Skywalking整体架构 3.3 部署组件介绍 四.Apac…

HTML当中元素的id属性

<!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>HTML当中元素的id属性</title> </head> <body> <!-- 1、在HTML文档当中&#xff0c;任何元素/节…

详解promise与手写实现

详解promise与手写实现Promise1、Promise介绍与基本使用1.1 Promise概述1.2 Promise的作用1.3 Promise的使用2、Promise API3、Promise关键问题4、Promise自定义封装5、async与await5.1. mdn文档5.2.async函数5.3.await表达式5.4.注意Promise 1、Promise介绍与基本使用 1.1 P…