Node.js | 青训营笔记

70 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 7 天

Node.js的起源

最初的目标是写一个基于事件驱动、非阻塞I/O的Web服务器,以达到更高的性能,提供Apache等服务器之外的选择。他说,大多数人不设计一种更简单和更有效的程序的主要原因是他们用到了阻塞I/O的库。写作Node的时候,但是C的开发成本太高,可以预见不会有太多的开发者能将它用于日常的业务开发,所以舍弃它;又觉得自己还不足够玩转Haskell,所以舍弃它;Lua自身已经含有很多阻塞I/O库,为其构建非阻塞I/O库也不能改变人们继续使用阻塞I/O库的习惯,所以也舍弃它;而Ruby的虚拟机由于性能不好而落选。相比之下,JavaScript比C的开发门槛要低,比Lua的历史包袱要少。尽管服务端JavaScript存在已经很多年了考虑到高性能、符合事件驱动、没有历史包袱这3个主要原因,JavaScript成为了Node的实现原因。

Node.js的特点

1.异步I/O
node是服务器端的。现在异步的机制是当我们执行请求的时候,立即执行后面的代码而不需要等待,请求结果放在回调函数当中,提高了效率。当I/O操作执行完毕之后会以事件的形式通知执行I/O操作的线程。
2.单线程
Node通过事件驱动的方式处理请求时,无需为每一个请求都创建一个线程,而是采用一个线程,以循环处理的方式进行。客户端每进行一个I/O操作,都会添加到事件队列当中,线程会留下一个处理结果的回调函数。所以不用像java那样会有很高的使用成本。