第3章 异步I/O

来源:互联网 发布:潮汕女孩知乎 编辑:程序博客网 时间:2024/06/10 21:35

3.1 为什么要异步I/O

3.1.1 用户体验
浏览器中JavaScript在单线程上执行,而且它还与UI渲染共用一个线程,这意味着JavaScript在执行的时候UI渲染和响应是处于停滞状态的。

3.1.2 资源分配
Node:利用单线程,远离多线程死锁、状态同步等问题;利用异步I/O,让单线程远离阻塞,以更好地使用CPU。

3.2 异步I/O实现现状

3.2.1 异步I/O与非阻塞I/O
操作系统内核对于i/o只有两种方式:阻塞与非阻塞。
非阻塞:需要重复调用i/o操作来确认是否完成,叫做轮询

3.2.2 理想的非阻塞异步i/o
在Linux下存在这样一种方式,它原生提供的一种异步i/o方式(AIO)就是通过信号或回调来传递数据的。

3.2.3 现实的异步i/o
通过多线程模拟异步。

3.3 Node的异步i/o

3.3.1 事件循环

3.3.2 观察者

3.3.3 请求对象

3.3.4 执行回调
这里写图片描述

3.3.5 小结
Node异步i/o的关键字:单线程、时间循环、观察者、i/o线程池。

3.4 非i/o的异步API

3.5 时间驱动与高性能服务器
这里写图片描述