返回顶部
首页 > 资讯 > 前端开发 > html >nodejs中I/O的含义是什么
  • 839
分享到

nodejs中I/O的含义是什么

2024-04-02 19:04:59 839人浏览 泡泡鱼
摘要

这篇文章主要介绍“nodejs中I/O的含义是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“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的含义是什么

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

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

nodejs中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的含义是什么

三.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的含义是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网html频道,小编每天都会为大家更新不同的知识点。

--结束END--

本文标题: nodejs中I/O的含义是什么

本文链接: https://lsjlt.com/news/91341.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • nodejs中I/O的含义是什么
    这篇文章主要介绍“nodejs中I/O的含义是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“nodejs中I/O的含义是什么”文章能帮助大家解决问题。 ...
    99+
    2024-04-02
  • nodejs中回调的含义是什么
    这篇文章主要介绍“nodejs中回调的含义是什么”,在日常操作中,相信很多人在nodejs中回调的含义是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”nodejs中回调的...
    99+
    2024-04-02
  • nodejs里nodal的含义是什么
    本文小编为大家详细介绍“nodejs里nodal的含义是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“nodejs里nodal的含义是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学...
    99+
    2024-04-02
  • Node.js中非阻塞I/O是什么
    本篇文章为大家展示了Node.js中非阻塞I/O是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。先新建一个index.js,再打开我们前端人的vs-code,打...
    99+
    2024-04-02
  • Nodejs中异步I/O的示例分析
    小编给大家分享一下Nodejs中异步I/O的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!“异步”这个名词其实在Node之前就已经诞生了。但是在绝大多数高...
    99+
    2023-06-14
  • c++中i+++j的含义
    c++ 中的 i+++j 是一种后缀自增运算符,表示以下操作:1. i 的值先增加 1,成为 i+1。2. i+1 的值再赋值给 j,因此 j 的值也成为 i+1。 C++ 中 i++...
    99+
    2024-05-01
    c++
  • nodejs回调地狱的含义是什么
    本篇内容主要讲解“nodejs回调地狱的含义是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“nodejs回调地狱的含义是什么”吧! ...
    99+
    2024-04-02
  • NodeJs异步编程的含义是什么
    本文小编为大家详细介绍“NodeJs异步编程的含义是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“NodeJs异步编程的含义是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识...
    99+
    2024-04-02
  • Linux中直接I/O原理是什么
    这篇文章主要为大家展示了“Linux中直接I/O原理是什么”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Linux中直接I/O原理是什么”这篇文章吧。什么是缓存 I/O (Buffered I/...
    99+
    2023-06-16
  • Linux I/O调度器是什么
    这篇文章主要介绍Linux I/O调度器是什么,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Linux I/O 调度器是Linux内核中的一个组成部分,用户可以通过调整这个调度器来优化系统性能。Linux I/O 系...
    99+
    2023-06-16
  • c++中::是什么含义
    作用域解析运算符 :: 用于指定标识符的作用域,并访问该作用域中的成员,包括:访问全局变量和函数访问类成员访问静态成员避免过度使用 ::,以保持代码的可读性和可维护性。 C++ 中 :...
    99+
    2024-04-26
    c++ 作用域
  • PHP的中文含义是什么
    本教程操作环境:windows7系统、PHP7.1版、DELL G3电脑PHP 全称 PHP Hypertext Preprocessor,是“超文本预处理器”的意思。它是一种跨平台的、开源的、服务器端执行的脚本语言,其语法吸收了C语言、J...
    99+
    2017-01-22
    PHP
  • javascript中double的含义是什么
    这篇文章主要讲解了“javascript中double的含义是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“javascript中double的含义是什...
    99+
    2024-04-02
  • HTML中input的含义是什么
    本文小编为大家详细介绍“HTML中input的含义是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“HTML中input的含义是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识...
    99+
    2024-04-02
  • HTML中title的含义是什么
    本文小编为大家详细介绍“HTML中title的含义是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“HTML中title的含义是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识...
    99+
    2024-04-02
  • node.js中url的含义是什么
    本篇内容主要讲解“node.js中url的含义是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“node.js中url的含义是什么”吧! ...
    99+
    2024-04-02
  • css中translate的含义是什么
    这篇文章主要介绍“css中translate的含义是什么”,在日常操作中,相信很多人在css中translate的含义是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”cs...
    99+
    2024-04-02
  • html的中文含义是什么
    这篇文章主要介绍“html的中文含义是什么”,在日常操作中,相信很多人在html的中文含义是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”html的中文含义是什么”的疑惑...
    99+
    2024-04-02
  • CSS中background的含义是什么
    本文小编为大家详细介绍“CSS中background的含义是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“CSS中background的含义是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,...
    99+
    2024-04-02
  • Linux中点的含义是什么
    这篇文章主要介绍了Linux中点的含义是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Paul Brown 解释了 Linux shell 命令中那个不起眼的“点”的各种...
    99+
    2023-06-16
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作