深入浅出node总结

node的诞生

2009年,Ryan Dahl为了写一个基于事件驱动、非阻塞I/O的web服务器,以达到更高的性能,提供Appache等服务器之外的选择。(设计高性能web服务器的几个要点:事件驱动、非阻塞I/O)

一、node特点

1.1异步I/O

在node中,绝大多数的操作都以异步的方式调用
异步I/O:在node中,我们可以从语言层面很自然的进行并行I/O操作,每个调用之间无需等待之前的I/O调用结束,在编程模型上可以极大提升效率

1.2事件与回调函数

事件的编程方式具有轻量级、松耦合、只关注事务点等优势,但是在多个异步任务的场景下,事件与事件之间各自独立,如何协作是一个问题
回调函数也是最好的接受异步调用返回数据的方式

1.3单线程

单线程最大的好处是不用像多线程那样处处在意状态的同步问题;
单线程也有它自身的弱点:
    **无法利用多核CPU**
    **错误会引起整个应用退出,应用的健壮性值得考验**
    **大量计算占用CPU导致无法继续调用异步I/O**
解决方案:node采用了与web workers相同的思路来解决单线程中达计算量的问题

1.4跨平台

目前,libuv已经成为许多系统实现跨平台的基础组件

1.5应用场景

    从单线程的角度来说,node处理I/O密集型的应用场景基本是没人反对的,node面向网络且擅长并行I/O,能偶有效地组织起更多的硬件资源,从而提供更多好的服务(I/O密集的优势主要在于node利用事件循环的处理能力,而不是启动每一个线程为每一个请求服务,资源占用极少)
    node虽然没有提供多线程的方式用于计算支持,但是还是有以下两个方式来充分利用CPU:
    **node可以通过编写c/c++扩展的方式更高效的利用cpu,将一些v8不能做到从性能极致的地方通过c/c++来实现,速度比java还快
    **如果单线程的node不能满足需求,甚至用了c/c++扩展后还觉得不够,那么通过子进程的方式,将一部分node进程当作常驻服务进程用于计算,然后利用进程间的消息来传递结果,将计算与I/O分离,这样能充分利用多CPU

1.6node的使用者

前后端编程环境统一
node带来的高性能I/O用于实时应用
并行I/O使得使用者可以更高效地利用分布式环境
并行I/O,有效利用稳定接口提升web渲染能力
云计算平台提供node支持
游戏开发领域
工具类应用

猜你喜欢

转载自blog.csdn.net/eatgirlhui_unique/article/details/78954197