非阻塞IO与阻塞IO

  • IO就是输入—输出

  • 操作系统通常提供了两种调用方式,阻塞调用和非阻塞调用

    • 阻塞式调用: 调用结果返回之前,当前线程处于阻塞态(阻塞态CPU不会分配时间片),调用线程只有在得到调用结果之后才会继续执行
    • 非阻塞式调用:调用执行之后,当线程不会停止执行,只需要过一段时间来检查一下有没有结果返回即可。
  • 非阻塞式调用的问题

    • 我们没有获取到结果,因为是异步的
    • 我们为了得到完整的数据,需要频繁的去确定度渠道的数据是否完整
    • 这歌过程角轮训操作
  • kibuv提供了一个线程池

    • 线程池会负责所有相关的操作,并且会轮训或者其他的方式等待结果。
    • 当获取奥结果的时候,就可以将对应的回掉放回到事件循环(某一个事件队列)中。
    • 事件循环就可以负责接管后续的回掉工作,让应用程序执行对应的回掉函数。
  • 阻塞于非阻塞对于被调用者,即系统层面,系统为程序提供了阻塞调用和非阻塞调用,同步和异步是对于调用者,就是自己的程序,发七调用,没有其他操作,只是等待结果这个过程就是同步,发起调用后会等待结果,继续完成其他的工作,等有回掉再执行,这个过程就是异步的。

  • 不需要关注线程安全问题。

  • 微任务队列:

    • next tick queue: process.nextTick;
    • other queue: Promis的then。queueMicrotash
  • 宏观任务队列:

    • timer queue,settimeout…;
    • poll queue: IO事件;
    • check queue: setImmediate ;
    • Close queue: 回掉函数close 事件
  • 事件队列初始化

    setTimeout( fn1 )
    setImmediate( fn2 )// 理论上是fn1() >>> fn2()
    // 先会将setTimeout的回掉内容挂在到事件树上去,放入队列中,但是这个过程需要消耗时间
    // 当同步代码执行完成,此时,就会初始化事件循环 这个过程需要消耗时间
    // 开始第一次tick 会一次执行setTimeout 然后会有一个check过程,检测是否有setImmediate,有就执行setImmediate;// 假设 同步代码执行完成后,时间循环初始化的时间快于setTimeout回掉挂在到队列树上的时候,就会出现 fn2() >>> fn1()
    // 初始化事件循环队列后就会立马开始执行,遇到check后检测是否有setImmediate,就会执行setImmediate,不会等待setTimeout挂在到队列树上之后在执行,
    

八. Stream

  • 文件的二进制数据如同流水一样被拉去到程序中,即字节流

  • 所有的流都是EventEmitter的实例

  • http模块的Request和response,process.stdout对象

  • stream初次尝试

    • // 流的方式读取文件
      const reader = fs.createReadStream("path", {start: 2,end: 10,highWaterMark: 2 // 每次读取多少
      });
      reader.on("data", data => {console.log(data);reader.pause() // 暂停读取reader.resume() // 开始读取
      })
      reader.on("opne",fn)
      reader.on("close",fn)
      
    • pipe可以将读取出来的流全部写入

      const reader = fs.createReadStream("path")
      const reader = fs.createWriteStream("path")reader.pipe(writer);
      

非阻塞IO与阻塞IO相关推荐

  1. 【网络编程】同步IO、异步IO、阻塞IO、非阻塞IO

    IO分两阶段: 1.数据准备阶段:在该阶段,根据是否等待数据准备,将IO分成阻塞和非阻塞: 2.内核空间复制回用户进程缓冲区阶段:在该阶段,只要程序需要等待复制完成,才能往下运行(尽管这个时间很短), ...

  2. python复制文件夹不阻塞_Python学习第54天(阻塞(blocking) IO和非阻塞(non-blocking)IO)...

    今天之所以这么早结束,主要是因为自己脑子不够用了,发现最近的定义有点多,完全搞不清楚了,打算早点睡觉,今天的内容估计要引用很多别人的部分了. 看到题目的四个东东是不是惊呆了,我也是惊呆了,同时脑子还跟 ...

  3. 【多线程】0.理解一下5种IO模型、阻塞IO和非阻塞IO、同步IO和异步IO

    5种IO模型.阻塞IO和非阻塞IO.同步IO和异步IO 看了一些文章,发现有很多不同的理解,可能是因为大家入切的角度.环境不一样.所以,我们先说明基本的IO操作及环境. 本文是在<UNIX网络编 ...

  4. IO之阻塞与非阻塞比较

    在网络程序中遇到的一些问题进行了总结, 这里主要针对的是我们常用的TCP socket相关的总结, 可能会存在错误, 有任何问题欢迎大家提出. 对于网络编程的更多详细说明建议参考下面的书籍 <U ...

  5. 同步阻塞,同步非阻塞,异步阻塞,异步非阻塞IO

    在高性能的I/O设计中,有两个比较著名的模式Reactor和Proactor模式,其中Reactor模式用于同步I/O,而Proactor运用于异步I/O操作. 在比较这两个模式之前,我们首先的搞明白 ...

  6. java epoll select_Java 非阻塞 IO 和异步 IO

    点击上方 Java后端,选择 设为星标 优质文章,及时送达 作者 | HongJie 链接 | javadoop.com/post/nio-and-aio 本文将介绍非阻塞 IO 和异步 IO,也就是 ...

  7. Linux网络编程 | IO模型 :阻塞IO、非阻塞IO、信号驱动IO、异步IO、多路复用IO

    目录 IO模型 阻塞与非阻塞 同步与异步 阻塞IO 非阻塞IO 信号驱动IO 多路复用IO 异步IO IO模型 根据各自的特性不同,IO模型被分为阻塞IO.非阻塞IO.信号驱动IO.异步IO.多路复用 ...

  8. 5种网络IO模型:阻塞IO、非阻塞IO、异步IO、多路复用IO、信号驱动IO

    目录 前言 阻塞IO(blocking IO) 非阻塞IO(non-blocking IO) 多路复用IO(IO multiplexing) 异步IO(Asynchronous I/O) 模型间的区别 ...

  9. 同步IO、异步IO、阻塞IO、非阻塞IO、复用IO

    参考:同步IO 异步IO 作者:今天天气眞好 发布时间: 2021-04-19 09:42:29 网址:https://blog.csdn.net/qq_51118175/article/detail ...

  10. Java 非阻塞 IO 和异步 IO

    转载自 Java 非阻塞 IO 和异步 IO 上一篇文章介绍了 Java NIO 中 Buffer.Channel 和 Selector 的基本操作,主要是一些接口操作,比较简单. 本文将介绍非阻塞 ...

最新文章

  1. iphone如何信任软件_你还在用大众点评吗?评价软件失去信任还如何活下去
  2. 关于react中setState的深入理解
  3. c#万能视频播放器 (转)
  4. PTP NTP kernel 驱动讲解 (未完待续)
  5. 【 Linux 】Vim的基本配置以及出现问题解决(su认证失败)
  6. 传统多线程之前如何共享数据
  7. 分布式从mysql查数据_技术分享 | 从库数据的查找和参数 slave_rows_search_algorithms...
  8. MRI炎症和结构损伤指标对TNF拮抗剂治疗AS患者获持续缓解的预测价值
  9. JAVA设计模式之装饰模式
  10. Core-3399-JD4 六核高性能AI核心板
  11. HttpClient中的各种请求
  12. EcmaScript正則表達式( 深入淺出系列之淺出 )
  13. 2 什么是计算机网络设置密码,计算机网络技术及应用(第2版)第6章网络操作系统基本配置.ppt...
  14. (43)Xilinx RAM IP核配置(四)(第9天)
  15. myEclipse的subversion插件Subclipse
  16. 字节跳动算法工程师总结:单片机用java语言编程
  17. python使用queue和线程池
  18. 前端模板inspinia
  19. 2017-2018-2 20179215《网络攻防实践》第八周作业
  20. GRE隧道封装协议及内核处理解析

热门文章

  1. Java 编程开发的30个技巧
  2. Spring项目中value注解,@Value不能够读取到配置文件的值,无法成功注入值的问题解决(超简单)
  3. MAP 地图 本地搜索
  4. 高德地图的简单使用:点击标记获取经纬度和详细地址
  5. 多属性决策与层次分析
  6. eclipse git push 冲突问题解决
  7. docker下apache配置项目
  8. 【问题记录】Office2019与Visio2016冲突
  9. 多重背包O(VN)算法——单调队列优化
  10. 这两天在看《大国崛起》