博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
“从相遇到深爱-Nodejs”-开篇
阅读量:6263 次
发布时间:2019-06-22

本文共 1183 字,大约阅读时间需要 3 分钟。

hot3.png

如题,进入新公司后,才真正接触到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的影响小。

转载于:https://my.oschina.net/sunangie/blog/1550215

你可能感兴趣的文章
使用快捷键,快到极致
查看>>
[原]【实例化需求】1.FitNesse工具应用简介
查看>>
java中的import和package机制
查看>>
统计、案例-深入理解Oracle索引(10):索引列字符类型统计信息的32位限制-by小雨...
查看>>
ubuntu常用命令精选
查看>>
UML类图
查看>>
企业上市上市央企大面积亏损折射出啥弊端?
查看>>
DXP_protel2004_原理图设计基础_集成运放原理图设计学习
查看>>
powershell--uninstall webapplication
查看>>
ubuntu配置vsftpd记录
查看>>
日期控件Android 自定义日历控件
查看>>
Java多线程编程:变量共享分析(Thread)
查看>>
word如何自动生成目录
查看>>
疯狂暑期学习计划~~~
查看>>
Mysql查询大表出现的一个错误
查看>>
Scala 中的foreach和map方法比较
查看>>
使用OWIN作为WebAPI的宿主
查看>>
阿里巴巴、腾讯、百度的面试问题笔知识汇总(两)
查看>>
如果他们在未来的几年内技术水平没有突破性的提升,或者缺乏一点灵性和品味,那么可能在未来很长一段时间内,他们都会保持这个薪资水平(转)...
查看>>
修改setup.py的源
查看>>