“从相遇到深爱-Nodejs”-开篇


声明:本文转载自https://my.oschina.net/sunangie/blog/1550215,转载目的在于传递更多信息,仅供学习交流之用。如有侵权行为,请联系我,我会及时删除。

如题,进入新公司后,才真正接触到Nodejs的开发。虽然之前了解过很多,却一直犹如未见面的新娘,“犹抱琵琶半遮面”,不知庐山真面目。真正接触之后,发现对Node一发不可收拾,深深的迷恋。

开篇是为了记录下自己对Node的学习过程,供大家分享。

1. Node的特点

1.1 异步IO

异步调用是注重结果、不关心过程的一种表现。符合“Don't call me,I will call you"的原则的。

在Node中,绝大多数的操作都是异步的方式进行调用。

var fs = require('fs');  fs.readFile('/path',function(err,file){     cosole.log('读取文件完成'); } console.log('发起读取文件'); 

1.2 事件与回调函数

Node将前端浏览器中应用广泛且成熟的事件引入后端,配合异步I/O,将事件点暴露给业务逻辑。

1.3 单线程

Node保持了Javascript在浏览器中单线程的特点。单线程的好处是不用像多线程编程那样处处在意状态的同步问题,没有死锁,也没有线程上下文交换所带来的性能上的开销。

当然,单线程也存在一些弱点,总结如下:

  • [ ] 无法利用多核CPU;
  • [ ] 错误会引起整个应用退出,应用的健壮性值得考验;
  • [ ] 大量计算占用CPU导致无法继续调用异步I/O;

Node采用了与Web Workers相同的思路来解决单线程中大量计算量的问题:child_process. 子进程的出现,意味着Node可以从容应对单线程在健壮性和无法利用多核CPU方面的问题。通过将计算分发到各个子进程,可以将大量计算分解掉,然后再通过进程之间的事件消息来传递消息,这可以很好的保持应用模型的简单和低依赖,通过Master-Worker的管理方式,也可以很好的管理各个工作进程,以达到更高的健壮性。

1.4 跨平台

兼容windows和*nix;

1.5 Node的应用场景

1.5.1 I/O密集型

Node面向网络且擅长并行I/O,能够有效的组织起更多的硬件资源,从而提供更好的服务。

I/O密集的优势主要在于Node利用事件循环的处理能力,而不是启动每一个线程为每一个请求服务,资源占用极少。

1.5.2 CPU密集型业务

Node在性能上表现不俗。CPU密集型应用给Node带来的挑战主要是:由于JavaScript单线程的原因,如果有长时间将运行的计算(比如大循环),将会导致CPU时间片不能释放,使得后续I/O无法发起。

关于CPU密集型应用,Node的异步I/O已经解决了在单线程上CPU与I/O之间阻塞无法重叠利用的问题,I/O阻塞造成的性能浪费远比CPU的影响小。

本文发表于2017年10月15日 14:34
(c)注:本文转载自https://my.oschina.net/sunangie/blog/1550215,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如有侵权行为,请联系我们,我们会及时删除.

阅读 1884 讨论 0 喜欢 0

抢先体验

扫码体验
趣味小程序
文字表情生成器

闪念胶囊

你要过得好哇,这样我才能恨你啊,你要是过得不好,我都不知道该恨你还是拥抱你啊。

直抵黄龙府,与诸君痛饮尔。

那时陪伴我的人啊,你们如今在何方。

不出意外的话,我们再也不会见了,祝你前程似锦。

这世界真好,吃野东西也要留出这条命来看看

快捷链接
网站地图
提交友链
Copyright © 2016 - 2021 Cion.
All Rights Reserved.
京ICP备2021004668号-1