Node.js入门到精通(6)异步IO
2016-12-06 17:22
246 查看
Node.js最大的特点就是异步式I/O(或者非阻塞I/O)与事件紧密结合的编程模式。这种模式与传统的同步式I/O线性的编程思路有很大的不同,因为控制流很大程度上要靠事件和回调函数来组织,一个逻辑要拆分为若干个单元。
同步式I/O
线程在执行中如果遇到磁盘读写或网络通信(统称为I/O操作),通常要耗费较长的时间,这时操作系统会剥夺这个线程的CPU控制权,使其暂停执行,同时将资源让给其他的工作线程,这种线程调度方式称为阻塞。当I/O操作完毕时,操作系统将这个线程的阻塞状态解除,恢复其对CPU的控制权,令其继续执行。这种I/O模式就是通常的同步式I/O (阻塞式I/O )。
一个线程只能处理一项任务,要想提高吞吐量必须通过多线程
多线程往往能提高系统吞吐量,可以让CPU资源不被阻塞中的线程浪费
异步式I/O
异步式I/O(非阻塞式I/O )则针对所有I/O操作不采用阻塞的策略。当线程遇到I/O操作时,不会以阻塞的方式等待I/O操作的完成或数据的返回,而只是将I/O请求发送给操作系统,继续执行下一条语句。当操作系统完成I/O操作时,以事件的形式通知执行I/O操作的线程,线程会在特定时候处理这个事件。为了处理异步 I/O,线程必须有事件循环,不断地检查有没有未处理的事件,依次予以处理。
一个线程永远在执行计算操作,这个线程所使用的CPU核心利用率永远是100%
线程不会被I/O阻塞,永远在利用CPU
假设我们有一项工作,可以分为两个计算部分和一个I/O部分,I/O部分占的时间比计算多得多(通常都是这样)。如果我们使用阻塞I/O,那么要想获得高并发就必须开启多个线程。而使用异步式I/O时,单线程即可胜任。
多线程同步式I/O
单线程异步式I/O
单线程事件驱动的异步式I/O比传统的多线程阻塞式I/O究竟好在哪里呢?简而言之,异步式I/O就是少了多线程的开销。对操作系统来说,创建一个线程的代价是十分昂贵的,需要给它分配内存、列入调度,同时在线程切换的时候还要执行内存换页,CPU的缓存被清空,切换回来的时候还要重新从内存中读取信息,破坏了数据的局部性。
同步式I/O
线程在执行中如果遇到磁盘读写或网络通信(统称为I/O操作),通常要耗费较长的时间,这时操作系统会剥夺这个线程的CPU控制权,使其暂停执行,同时将资源让给其他的工作线程,这种线程调度方式称为阻塞。当I/O操作完毕时,操作系统将这个线程的阻塞状态解除,恢复其对CPU的控制权,令其继续执行。这种I/O模式就是通常的同步式I/O (阻塞式I/O )。
一个线程只能处理一项任务,要想提高吞吐量必须通过多线程
多线程往往能提高系统吞吐量,可以让CPU资源不被阻塞中的线程浪费
异步式I/O
异步式I/O(非阻塞式I/O )则针对所有I/O操作不采用阻塞的策略。当线程遇到I/O操作时,不会以阻塞的方式等待I/O操作的完成或数据的返回,而只是将I/O请求发送给操作系统,继续执行下一条语句。当操作系统完成I/O操作时,以事件的形式通知执行I/O操作的线程,线程会在特定时候处理这个事件。为了处理异步 I/O,线程必须有事件循环,不断地检查有没有未处理的事件,依次予以处理。
一个线程永远在执行计算操作,这个线程所使用的CPU核心利用率永远是100%
线程不会被I/O阻塞,永远在利用CPU
假设我们有一项工作,可以分为两个计算部分和一个I/O部分,I/O部分占的时间比计算多得多(通常都是这样)。如果我们使用阻塞I/O,那么要想获得高并发就必须开启多个线程。而使用异步式I/O时,单线程即可胜任。
多线程同步式I/O
单线程异步式I/O
单线程事件驱动的异步式I/O比传统的多线程阻塞式I/O究竟好在哪里呢?简而言之,异步式I/O就是少了多线程的开销。对操作系统来说,创建一个线程的代价是十分昂贵的,需要给它分配内存、列入调度,同时在线程切换的时候还要执行内存换页,CPU的缓存被清空,切换回来的时候还要重新从内存中读取信息,破坏了数据的局部性。
相关文章推荐
- Node.js入门:异步IO
- Node.js入门到精通(8)事件循环
- Node.js入门到精通(2)入门程序
- Node.js入门:异步IO
- Node.js入门到精通(1)简介
- Node.js入门到精通(5)REPL模式
- Node.js入门到精通(3)使用supervisor工具
- Node.js入门到精通(7)回调函数
- node.js从入门到菜鸟——资源无法载入?你需要学会地址解析
- node.js 入门指导
- 很棒的node.js入门学习材料
- Node.js基础入门实例讲解
- Node入门 » 一本全面的Node.js教程
- Node.js入门学习笔记-IDE选择/配置之WebStorm(windows)
- node.js入门
- Node.js从入门到深入——Node.js的了解
- Node.js从入门到深入——Node.js配置开发
- Node.js入门学习笔记-IDE选择/配置之WebStorm(windows)
- 不错的node.js入门
- Node.js的模块写法入门