第三章 异步I/O
为什么要异步I/O
- 为了不影响用户体验
- 为了应对分布式处理
资源分配
处理一组不相关的任务有两种方式:单线程,多线程,但是他们都有一些问题。
Node采用单线程,远离多线程死锁,状态同步等问题;利用异步I/O,让单线程远离阻塞
Node 异步I/O
Node的执行模型是一个事件循环,每执行一次循环称为一次Tick
异步I/O的过程是先请求对象,送入I/O线程池,然后执行回调
非I/O的异步API
-
定时器 setTimeout 和 setInterval
process.nextTick()
顾名思义,在下一个Tick的时候执行
相比定时器采用红黑树(操作时间复杂度O(lg(n))),nextTick()时间复杂度为O(1),更高效setImmediate()
与nextTick()十分类似,但是比nextTick()慢一点