服务端JavaScript(Node.js)与去IO编程:Node.js的事件驱动和非阻塞IO模型,它是如何使JavaScript走向后端的

devtools/2024/9/23 19:22:35/

        在Node.js中,JavaScript代码运行在V8引擎上。由于JavaScript是单线程语言,一次只能处理一个事件。为了解决这个问题,Node.js引入了事件驱动模型。每个进行IO操作的函数都是异步的,当这个函数被调用的时候,它不会立即执行IO操作,而是将操作封装为一个任务,加入到事件队列中。之后函数立即返回,处理下一个任务。

        事件循环(Event Loop)就像是一个循环,不停地从事件队列中取出任务执行。当事件队列中没有任务时,事件循环会等待新的IO任务入队。当IO操作完成,相关的回调函数被添加到任务队列,等待事件循环取出执行。

        通过这种方式,Node.js实现了非阻塞IO模型。当IO操作正在进行,Node.js不会空闲等待结果,而是继续处理其他任务。待IO操作完成,回调函数入队,才会被执行。这就大大提升了程序的并发性能,使得Node.js可以有效地处理大量并发请求。

        以下是一个Node.js的非阻塞IO的代码示例。这个代码通过Node.js的fs模块,异步读取一个文本文件。当读取操作完成后,执行回调函数。

const fs = require('fs');fs.readFile('myfile.txt', 'utf8' , (err, data) => {if (err) {console.error(err);return;}console.log(data);
});console.log('Reading file...');

        这里,fs.readFile函数的参数包括文件名,编码,以及一个回调函数。回调函数在读取文件完成后被调用。err参数对应错误信息,如果读取成功,err为null。data参数对应文件内容。

        值得注意的是,虽然读取文件是一个耗时的IO操作,但由于Node.js的非阻塞特性,fs.readFile函数并不会阻塞程序,而是拿到任务后立即返回。因此,'Reading file...'这行代码会先于回调函数内的console.log(data)执行,即使文件读取未完成。


http://www.ppmy.cn/devtools/39528.html

相关文章

6. Z 字形变换

题目描述 给你一个字符串s和行数numRows,把s字符串按照z字形重新排列。 再从左往右进行读取,返回读取之后的字符串。 本题是找规律,但是没有找出来 解题思路 要想解出来该题,在进行z字变换的时候,我们把字符串的下…

git查看分支信息

在Git命令行中,如果您想查看最近创建的所有分支的名称,可以使用git branch命令结合其他参数来实现。以下是一些常用的方法: 查看所有分支(包括远程分支): git branch -a这将列出本地和远程的所有分支。 查…

【笔记】Android MVNO APN 字段配置方法

Android APN配置针对虚拟运营商包含以下两个字段对卡进行匹配(除了MCC、MNC之外): Mvno TypeMvno Match Data在 APN 配置中,运营商使用MVNO=IMSI时,一般开头是mccmnc+prefix+[range],那么mccmnc和 prefix正常配置,后面range的可变范围直接用“xxxx”同等长度占位。 MVNO…

【北京迅为】《iTOP-3588开发板从零搭建ubuntu环境手册》-第2章 获取并安装Ubuntu操作系统

RK3588是一款低功耗、高性能的处理器,适用于基于arm的PC和Edge计算设备、个人移动互联网设备等数字多媒体应用,RK3588支持8K视频编解码,内置GPU可以完全兼容OpenGLES 1.1、2.0和3.2。RK3588引入了新一代完全基于硬件的最大4800万像素ISP&…

python 虚拟环境

你真的了解虚拟环境吗?很对人可能是代码高手,但是对虚拟环境和本地环境的理解有点模糊,最近化了点时间研究了下虚拟环境,这里做一总结。 安装python时的环境可以理解为真实环境,虚拟环境可以理解为真实环境的一个或多…

安卓SELinux策略

SELinux策略语言–类型强制(编写TE规则) selinux权限说明及问题解决 Selinux篇3 -TE规则 Android中SeLinux权限 .te文件编写 Android 系统添加SELinux权限 [SeLinux]audit2allow安装与使用 SELinux规则添加进阶

Linux磁盘管理

一、磁盘管理 1磁盘为什么要做分区 管理数据:通过将磁盘划分为多个分区,可以更好地组织和管理数据。每个分区可以独立地存储文件和操作系统数据,使得文件系统更加有序和高效。 提高性能:将磁盘分为多个分区可以提高磁盘的读写性…

AI大模型探索之路-训练篇17:大语言模型预训练-微调技术之QLoRA

系列篇章💥 AI大模型探索之路-训练篇1:大语言模型微调基础认知 AI大模型探索之路-训练篇2:大语言模型预训练基础认知 AI大模型探索之路-训练篇3:大语言模型全景解读 AI大模型探索之路-训练篇4:大语言模型训练数据集概…