深入浅出 Node.js 第一章阅读总结
Node.js 被设计出来的目的就是要做一个高性能的 web 服务器,所以它是为服务器而生的而不是只做前端。
Node.js 设计必须要达到以下 2 点才能符合 Ryan Dahl 设计高性能服务器的初衷
事件驱动
非阻塞 I/O
由于 JavaScript 的特点非常符合 Node.js 的设计理念,而且 Chrome 的 V8 引擎在第二次浏览器大战中由于性能强大而胜出。所以奠定了 JavaScript 成为 Node.js 编写语言的基础。
由于 Node.js 使用 JavaScript 来编写,所以也有了单线程的特点。
单线程的优缺点
优点:
不会出现多线程的死锁问题
线程切换带来的性能消耗
编程时针对多线程数据同步的考虑
适合在 I/O 密集的场景使用
等等
缺点:
无法利用多核 CPU
错误会引起整个应用退出
大量计算占用 CPU 导致无法继续调用异步 I/O。简单来说就是不太适用在 CPU 密集型的场景。
针对单线程的缺点,Node.js 提供了两种解决方案
靠自身,就是使用开多个进程实现
靠第三方,就是调用自己编写的 C/C++扩展工具实现
根据以下 Node.js 的组件结构图可以得出,Node.js 是靠中间层(Libuv)操作底层的硬件和跨平台操作
Node.js 的组件结构图
评论