• NodeJS示例异步式(Asynchronous)IO与同步式Synchronous)IO


    理解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'); 待读取操作结束后通知线程响应此时的回调函数,执行了结果打印操作。
     1 /*
     2 * 异步式(Asynchronous) I/O Example. 7 */
     8 var file = require('fs');//声明对象
     9 //异步式读取
    10 file.readFile('file.json','utf-8', function(error,data) {
    11     if (error) {
    12         console.error(error);
    13     } else {
    14         console.log(data);
    15     }
    16 });
    17 //读取结束
    18 console.log("read over.");

    运行结果:

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

     

    同步式:

    此次执行的结果则是先读取完package.json文件的内容并打印, 然后打印read over.
     1 /**
     2 * 同步式(Synchronous) I/O Example.
     3 */
     6 var file = require('fs');//声明对象
     7 //readFileSync()方法为NodeJs官方提供的同步式文件读取方法,
     8 //但是官方并不推荐。
     9 var data = file.readFileSync('file.json', 'utf-8');
    10 console.log(data);
    11 //读取结束
    12 console.log("read over.");
    运行结果:
      
    1 >node readfile.js
    2 >{
    3         "description" : "this is Synchronous I/O and Aynchronous I/O test."
    4    }  
    5 >read over.  

     

    结语: 
         通过这2段代码的运行结果,相信大家对同步于异步的理解应该更加一目了然了。初次接触Node的朋友可以去官网查看教程,安装NodeJs,
    亲手尝试尝试NodeJs的异步编程~。如有任何疑问或者问题,欢迎联系我。
     
    注:参考《NodeJs开发指南》
  • 相关阅读:
    [saiku] 系统登录成功后查询Cubes
    216. Combination Sum III
    215. Kth Largest Element in an Array
    214. Shortest Palindrome
    213. House Robber II
    212. Word Search II
    211. Add and Search Word
    210. Course Schedule II
    分硬币问题
    开始学习Python
  • 原文地址:https://www.cnblogs.com/zivxiaowei/p/3632482.html
Copyright © 2020-2023  润新知