1. Node的官方网站: http://nodejs.org
2. Node的缘起:
Ryan Dahl 打算设计一个高性能的Web服务器。
Ryan Dahl 认为设计高性能Web服务器的要点在于:
(1)事件驱动
(2)非阻塞I/O
(what? && why?)
Ryan Dahl 选择使用JavaScript作为该服务器的实现语言,起名为Node。
*为什么是JavaScript?
(1)高性能
(2)符合事件驱动
(3)没有历史包袱
3. Node的特点
(1)保留前端浏览器JavaScript中熟悉的接口,没有改写语言本身的任何特性,依旧基于作用域链和原型链。
(2)异步I/O,在Node中,绝大多数的操作都以异步的方式进行调用。
(3)事件与回调函数。事件的编程方式具有轻量级,松耦合,只关注事物点的优势。
(4)单线程。不用像多线程编程那样处处在意状态的同步问题,这里没有死锁的存在,也没有县城上下文交换所带来的性能上的开销。
*单线程的缺陷:
(1)无法利用多核CPU
(2)错误会引起整个应用退出,应用的健壮性值得考验。
(3)大量计算占用CPU导致无法继续调用异步I/O -> 已使用child_process解决
(5)跨平台
4.Node的应用场景
(1)I/O密集型 -> Node面向网络且擅长并行I/O,能够有效地组织起更多的硬件资源,从而提供更多好的服务。(主要优势在于Node利用时间循环的处理能力,而不是启动每一个线程为每一个请求服务,资源占用极少。)
(2)CPU密集型 -> 诀窍在于如何合理调度。
(3)分布式应用