几种IO模型比较
要说几种IO模型,需要先讨论一下事件分离器的两种模式
1. Reactor模式
由回调函数完成实际的IO读写,操作系统仅通知,不读取
2. Proactor模式
由操作系统代为进行IO读写,将读取后的结果托付给回调函数
- AIO
非阻塞,采用Proactor模型,Windows的IOCP、Linux的epoll - NIO
非阻塞,采用Reactor模式 - BIO
阻塞IO
Nodejs为什么IO效率高呢?
1. AIO(目测用的最新的IO模型,没有证据,但至少是非阻塞IO)
2. 没有锁的状态,各种回调
私以为,Nodejs只适用于处理RestfulAPI等重IO轻逻辑的业务,原因如下:
1. 回调意味着逻辑处理的时间必然要少,不然会拖慢后面的所有任务。
2. 动态类型的语言,会引入很多低级的错误,比如跨文件变量名、方法名错误,WebStorm代码感知能力虽然不错,但是较耗资源,而且对于function中的入参无能为力。
3. 回调过多,引起捕获异常较为困难,会多出比较多的异常捕获代码