Node的特点
non-blocking I/O、event-driven、单线程、跨平台
异步I/O
- 定义:I/O是input/output的简写
- 优点:是无阻塞(non-blocking)
- 对比:同步I/O是阻塞的,执行相同数量的同步I/O操作的耗时比异步I/O多
- 应用:读取文件,发送网络请求
事件驱动(event-driven)
- 实质:通过主循环加事件触发的方式来运行程序
- 优点:事件的编程方式具有轻量级、松耦合、只关注事务点等优势
- 存在的问题:异步的场景下,事件与事件之间是各自独立的,他们之间的协作是一个问题
单线程
- 对比多线程有的好处:
- 不用在意状态同步问题;
- 没有死锁的存在;
- 没有线程上下文交换所带来的性能上的开销
- 单线程的缺点:
- 无法利用多核CPU
- 错误会引起整个应用退出,应用的健壮性值得考验
- 大量计算占用CPU导致无法继续调用异步I/O
- 解决方案:node使用child_process解决上诉缺点
Node的应用场景
Node适用的场景是I/O密集型,不擅长CPU密集型业务
由于Node是单线程的,如果有长时间运行的计算(即:CPU密集型业务),会导致线程一直被占用,使得后面的I/O操作无法执行
解决方法:编写C/C++扩展、使用子进程