1. 异步I/O
同步时间消耗: M+N
异步时间消耗: MAX(M, N)
耗时比较: CPU<内存<硬盘<网络
I/O: 磁盘文件, 硬件/内存, 套接字/网络
所以: node的异步, 可以高效的优化I/O方面的应用; CPU的耗时是最小的, 如果遇到高CPU计算的应用, 直接通过node实现是不擅长的, 可以考虑CPU率方向解决问题.
单线程同步编程模型: 堵塞I/O问题
多线程编程模型: 死锁, 状态同步, 上下文切换问题
阻塞I/O与非阻塞I/O区别
阻塞I/O: 完成了数据的获取过程, 这个过程, 用户进程只能等待结果返回.
非阻塞I/O: 不带数据返回, 获取数据需要文件句柄/文件描述符轮询读取.
node的的单线程, 仅仅只是js代码执行在单线程中, I/O任务是线程池处理的.
2. node的异步I/O

在node中, 除了js是单线程外, node自身时期是多线程的, 只是I/O线程使用的CPU较少.
3. node, 非I/O的异步API
setTimeout(), setInterval(), setImmediate(), process.nextTick()
setTimeout(), setInterval() 区别是setInterval是多次执行

setImmediate(), process.nextTick() 区别是优先级
setImmediate() 属于idle观察者
process.nextTick() 属于check观察者
优先级:
idle观察者>I/O观察者>check观察者
4. 事件驱动与高性能服务器
服务器模型
同步式: 一次只处理一个请求
每进程/每请求: 一个请求启动一个进程, php采用(不确定).
每线程/每请求: 一个请求启动一个线程, apache采用.
版本控制
| Version | Action | Time |
|---|---|---|
| 1.0 | Init | 2019-08-20 |