理解IO

     IO(Input/Output)通常是指计算机线程进行慈磁盘读写或者网络通信时的一种行为。
 
同步式(Synchronous)IO和异步式(Asynchronous )IO
 
     同步式:当计算机调度线程进行I/O操作命令后,由于文件的读写或者网络通信需要较长的操作时间,操作系统为了充分利用cpu,此时会暂停到当前的I/O线程对CPU的控制(故又称同步式为阻塞式I/O),把cup资源然给其他的线程资源,当I/O线程完成了操作时,此时操作系统会恢复此时的I/O线程,从而当前I/O线程重新获得了cup的的控制权,继续完成其他操作。
     NodeJs让很多前端开发者利用JS开发服务器变得异常的简单,而异步式I/O则是NodeJs的一大特点。
     异步式:异步式IO又称非阻塞式I/O,异步式与同步式不同的是,当线程进行IO操作时,操作系统并不是暂停当前的线程操作,而是执行完I/O指令后,操作系统继续让当前线程执行下一条指令,当I/O操作完成后,会通过事件(event)通知I/O线程,而线程在接收到通知后,会处理响应事件。
     简单的说,同步式是让通过多个线程完成多个任务,而异步式则是通过一个线程完成多个任务,遇到I/O操作时,依然让线程继续执行其他指令,只是在I/O完成后通知线程调度响应事件即可。
 
图解:
  
示例代码:
 
异步式:

注意这里的异步式执行结果是,控制台会先打印read over,然后才打印package.json文件中的内容,也就是说,线程执行文件IO时,继续先执行了console.log('read over'); 待读取操作结束后通知线程响应此时的回调函数,执行了结果打印操作。
 /*
* 异步式(Asynchronous) I/O Example. */
var file = require('fs');//声明对象
//异步式读取
file.readFile('file.json','utf-8', function(error,data) {
if (error) {
console.error(error);
} else {
console.log(data);
}
});
//读取结束
console.log("read over.");

运行结果:

 >node readfile.js
>read over.
>{
"description" : "this is Synchronous I/O and Aynchronous I/O test."
}

同步式:

此次执行的结果则是先读取完package.json文件的内容并打印, 然后打印read over.
 /**
* 同步式(Synchronous) I/O Example.
*/
var file = require('fs');//声明对象
//readFileSync()方法为NodeJs官方提供的同步式文件读取方法,
//但是官方并不推荐。
var data = file.readFileSync('file.json', 'utf-8');
console.log(data);
//读取结束
console.log("read over.");
运行结果:
  

 >node readfile.js
>{
"description" : "this is Synchronous I/O and Aynchronous I/O test."
}
>read over.
结语: 
     通过这2段代码的运行结果,相信大家对同步于异步的理解应该更加一目了然了。初次接触Node的朋友可以去官网查看教程,安装NodeJs,
亲手尝试尝试NodeJs的异步编程~。如有任何疑问或者问题,欢迎联系我。
 
注:参考《NodeJs开发指南》

NodeJS示例异步式(Asynchronous)IO与同步式Synchronous)IO的更多相关文章

  1. 同步IO与同步非阻塞IO的理解

    本文图片均来自网络 一.同步IO---Blocking IO 在Blocking IO模型中,用户空间的应用程序执行一个系统调用(recvform),这会导致应用程序阻塞,直到数据准备好,并且将数据从 ...

  2. 阻塞IO、非阻塞IO、同步IO、异步IO等

    https://www.cnblogs.com/zingp/p/6863170.html 阅读目录 1 基础知识回顾 2 I/O模式 3 事件驱动编程模型 4 select/poll/epoll的区别 ...

  3. 同步IO与一部IO、IO多路复用(番外篇)select、poll、epoll三者的区别;blocking和non-blocking的区别 synchronous IO和asynchronous IO的区别

    Python之路,Day9 , IO多路复用(番外篇)   同步IO和异步IO,阻塞IO和非阻塞IO分别是什么,到底有什么区别?不同的人在不同的上下文下给出的答案是不同的.所以先限定一下本文的上下文. ...

  4. python并发编程之IO模型 同步 异步 阻塞 非阻塞

    IO浅谈 首先 我们在谈及IO模型的时候,就必须要引入一个“操作系统”级别的调度者-系统内核(kernel),而阻塞非阻塞是跟进程/线程严密相关的,而进程/线程又是依赖于操作系统存在的,所以自然不能脱 ...

  5. IO中同步异步,阻塞与非阻塞 -- 原理篇

    再补一篇高手写的理论分析,便于更深刻理解 转自:http://blog.csdn.net/historyasamirror/article/details/5778378 ============== ...

  6. IO之同步、异步、阻塞、非阻塞

    Stevens在文章中一共比较了五种IO Model:    blocking IO    nonblocking IO    IO multiplexing    signal driven IO  ...

  7. Atitit  五种IO模型attilax总结 blocking和non-blocking synchronous IO和asynchronous I

    Atitit  五种IO模型attilax总结 blocking和non-blocking synchronous IO和asynchronous I   1.1. .3 进程的阻塞1 1.2. 网络 ...

  8. IO模型《六》IO模型比较分析

    IO模型比较分析 到目前为止,已经将四个IO Model都介绍完了.现在回过头来回答最初的那几个问题:blocking和non-blocking的区别在哪,synchronous IO和asynchr ...

  9. 谈谈对不同I/O模型的理解 (阻塞/非阻塞IO,同步/异步IO)

    一.关于I/O模型的问题 最近通过对ucore操作系统的学习,让我打开了操作系统内核这一黑盒子,与之前所学知识结合起来,解答了长久以来困扰我的关于I/O的一些问题. 1. 为什么redis能以单工作线 ...

随机推荐

  1. codeforces-540C

    题目连接:http://codeforces.com/problemset/problem/540/C C. Ice Cave time limit per test 2 seconds memory ...

  2. servlet方法

    1.每一个Servlet都必须要实现Servlet接口,GenericServlet是个通用的.不特定于任何协议的Servlet,它实现了Servlet接口,而HttpServlet继承于Generi ...

  3. 模板—字符串—后缀自动机(后缀自动机+线段树合并求right集合)

    模板—字符串—后缀自动机(后缀自动机+线段树合并求right集合) Code: #include <bits/stdc++.h> using namespace std; #define ...

  4. Web/JAVA 简单题目汇总

    [Java标识符,变量.常量] 一.Java合法标识符命名规则 (1)区分字母大小写,标识符长度不限 (2)  英文,Unicode码双字节文字字符(日文,韩文,中文),数字,下划线,$(美元符号)均 ...

  5. nginx的location匹配

    http://www.cnblogs.com/lidabo/p/4169396.html 这个博主写的非常好 location: 先匹配普通location,再匹配正则表达式 1.而且选择了最大前缀匹 ...

  6. Android AIDL实例解析

    AIDL这项技术在我们的开发中一般来说并不是很常用,虽然自己也使用新浪微博的SSO登录,其原理就是使用AIDL,但是自己一直没有动手完整的写过AIDL的例子,所以就有了这篇简单的文章. AIDL(An ...

  7. BFS求最短路

    假设有一个n行m列的迷宫,每个单位要么是空地(用1表示)要么是障碍物(用0表示).如和找到从起点到终点的最短路径?利用BFS搜索,逐步计算出每个节点到起点的最短距离,以及最短路径每个节点的前一个节点. ...

  8. Visio文件转EPS文件

    Visio转eps by gaihf@水木 看了前人写的关于Visio转EPS的文章,但是实践过程中还是碰到几个棘手的问题.现在这些问题终于解决了,把自己的一点体会分享给大家. 很多人习惯用Visio ...

  9. pycharm批量清楚pyc、$py.class文件

    By default, the .pyc and $py.class files are ignored, and thus are not visible in the Project tool w ...

  10. Xamarin.Forms 调用腾讯地图

    用Xamarin.Forms 也有一段时间了,跨平台,生成native代码的噱头 天花乱坠的, 其中的坑,只有用过的人才懂... 就拿地图来说...总不能用google地图吧 于是只能自己想办法了. ...