千家信息网

nodejs中I/O的含义是什么

发表于:2025-01-16 作者:千家信息网编辑
千家信息网最后更新 2025年01月16日,这篇文章主要介绍"nodejs中I/O的含义是什么"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"nodejs中I/O的含义是什么"文章能帮助大家解决问题。在n
千家信息网最后更新 2025年01月16日nodejs中I/O的含义是什么

这篇文章主要介绍"nodejs中I/O的含义是什么"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"nodejs中I/O的含义是什么"文章能帮助大家解决问题。

在nodejs中,"I/O"是输入输出的意思,通常表示"I/O"操作,"I/O"操作可以分为单线程串行依次执行和多线程并行执行,单线程安装顺序执行,在执行中任何一个稍慢都会导致后续执行代码阻塞。

本文操作环境:Windows10系统、nodejs 12.19.0版、Dell G3电脑。

nodejs中I/O是什么意思

对于Nginx服务器,很多人都是比较的熟悉,Nginx采用纯C编写而成,用于做Web服务器,在反向代理和负载均衡等服务方面有很好的优势。Node与Nginx服务器有着相似的地方,都是采用事件驱动。

浏览器中JavaScript在单线程上执行,而且还与UI渲染共用一个线程,JavaScript在执行的时候UI渲染和响应应是出于停滞状态。(如果脚本执行的时间超过100毫秒,用户就会感到页面卡顿)。遇到这些情况,我们就会想到异步的方式消除这些等待的问题,对于异步和同步的概念就不做介绍了。

接下来我们具体的来了解一下NodeJS的事件驱动和非阻塞I/O这些特点,了解这些对于我们更好的学习NodeJS开发和构建高性能的Web平台有更加深远的意义。

1.I/O操作概述:

I/O操作对于任何一个开发者来说都不会陌生,现在我们就简单的谈一下NodeJS的I.O操作。I/O操作分为:单线程串行依次执行;多线程并行执行。这两种方式各有优势和缺点,多线程的代价在于创建线程和执行期线程上下文切换的开销较大,并且多线程面临锁、状态同步的问题。单线程安装顺序执行,在执行中任何一个稍慢都会导致后续执行代码阻塞。对于任务的串行执行(概念上类似于同步执行)和任务的并行执行的描述有如下图:

在NodeJS中利用单线程,远离死锁、状态同步问题,利用异步I/O,让单线程远离阻塞,以便更好的使用CPU。异步I/O是期望I/O的调用不再阻塞后续运算,将原有等待I/O完成这段时间分配给其他需要的业务去执行。   

很多时候一些开发者对异步/同步和阻塞/非阻塞的概念有些分不清,这两者没有什么关联。阻塞I/O是调用之后一定要等到系统内核层面完成所有操作后,调用才结束。非阻塞I/O是在调用后立即返回。关于阻塞I/O和非阻塞I/O有如下图:

2.NodeJS异步I/O解析:

事件循环:在进程启动时,Node会创建一个类似于while(true)的循环,每执行一次循环体的过程称为Tick,每个Tick的过程就是查看是否有时间待处理。

观察者:每个时间循环中有一个或多个观察者,判断是否有事件要处理的过程就是向这些观察者询问是否又要处理的事件。

请求对象:从JavaScript发起调用到内核执行完I/O操作的过渡过程中,存在一种中间产物,就是请求对象。

I/O线程池:组装好请求、送入I/O线程池等待执行,完成第一步I/O操作,进入第二部分回调通知。(在Windows中,线程池中的I/O操作调用完毕之后,会将获取的结果存在req->result属性上,然后调用PostQueuedCompletionStatus()通知IOCP,告知当前对象操作已经完成。)

异步I/O有如下图:

三.NodeJS异步编程实例:

前面介绍了异步I/O的相关概念,这里提供一个异步I/O操作的实例:

var config = require('./config.json');var fs = require("fs");var http = require('http');var url_module = require("url");http.createServer(function (request, response) {var key = url_module.parse(request.url).query.replace('key=', '');switch (request.method) {   case 'GET':  // Asynchronous Response Generation       fs.readFile(config.dataPath + key, 'utf8', function(err, value) {           if (err) {               // Return File Not Found if file hasn't yet been created               response.writeHead(404, {'Content-Type': 'text/plain'});               response.end("The file (" + config.dataPath + key + ") does not yet exist.");           } else {               // If the file exists, read it and return the sorted contents               var sorted = value.split(config.sortSplitString).sort().join('');               response.writeHead(200, {'Content-Type': 'text/plain'});               response.end(sorted);           }       });       break;   case 'POST':  // Synchronously append POSTed data to a file       var postData = '';       request           .on('data', function (data) {               postData += data;           })           .on('end', function () {               fs.appendFile(config.dataPath + key, postData, function(err) {                   if (err) {                       //  Return error if unable to create/append to the file                       response.writeHead(400, {'Content-Type': 'text/plain'});                       response.end('Error: Unable to write file: ' + err);                   } else {                       //  Write or append posted data to a file, return "success" response                       response.writeHead(200, {'Content-Type': 'text/plain'});                       response.end('success');                   }               });           });       break;   default:       response.writeHead(400, {'Content-Type': 'text/plain'});       response.end("Error: Bad HTTP method: " + request.method);}}).listen(config.serverPort);console.log('synchronous server is running: ', config.serverPort);

关于"nodejs中I/O的含义是什么"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注行业资讯频道,小编每天都会为大家更新不同的知识点。

线程 阻塞 事件 过程 同步 时间 概念 问题 循环 服务 含义 下图 对象 就是 服务器 状态 知识 观察者 处理 开发 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 如何把数据库写到后台管理 总结与数据库和数据表相关的命令 mysql数据库所有记录数 华为终端上海招聘软件开发 数据库中qts是什么意思 红山区常见软件开发创新服务 云服务器合格供应商 海淀区网络软件开发联系方式 江西云链信息网络技术有限公司 嵌入式服务器加速 为什么软件部署在服务器上 网络安全规划编制背景 网络安全电子板报jpg oracle数据库登陆卡死 电力网络安全专项隐患排查问题 gp数据库查字符串 客服软件开发怎么做 pubg哪个服务器的人机多 网络安全保卫局局长什么级别 国家网络安全审查办报道 嘉兴hpe刀片服务器 网络安全公益宣传作品 杭州乐游网络技术有限公司 深信服软件开发加班真实情况 诺亚之心所有服务器维护 数据库目录遍历漏洞 阿里应用分发大数据库 树莓派和服务器是否一个原理 大话西游网络安全小品 阿里巴巴网络技术有限公司部门
0