Node的特点

Node.js以异步I/O实现高性能,通过事件和回调函数处理并发,保持单线程以简化同步问题,但面临多核利用率低和错误易致应用退出的挑战。为解决计算密集型任务,Node使用子进程,并通过libuv实现跨平台兼容性。
摘要由CSDN通过智能技术生成

Node的特点

1.异步I/O

例如读取文件:

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

复制

在Node中,绝大多数的操作都是以异步的方式进行调用。这样的意义在于,在

Node中,我们可以从语言层面很自然的进行并行I/O操作。在每个调用之间无须等待之前的I/O调用结束。

fs.readFile('/path1',function(err, file){  console.log('读取文件1完成')})fs.readFile('/path2',function(err,file){  console.log('读取文件2完成')})

复制

对于同步I/O而言,它们的耗时是两个任务的耗时之和。这里的异步带来的优势是显而易见的。

2.事件与回调函数

事件的编程方式具有轻量级、松耦合、只关注事物点等优势。但是在多个异步任务的场景下,事件与事件之间各自独立,如何协作是一个问题。

与其他的web后端语言相比,Node回调函数是一大特色。纵观下来,回调函数也是最好的接受异步调用返回数据的方式。

3.单线程

Node保持了JS在浏览器中单线程的特点。而且Node中,JS与其余线程是无法共享任何状态的。单线程的最大好处是不用像多线程那样处处在意状态的同步问题,这里没有死锁的村子,也没有线程上下文交换所带来的性能上的开销。单线程缺点:

-无法利用多核CPU

-错误会引起整个应用退出,应用的健壮性值的考验

-大量计算占用CPU导致无法继续调用异步I/O

像浏览器中JS与UI共用一个线程一样,JS长时间执行会导致UI的渲染和响应被中断。在Node中,长时间的CPU占用也会导致后续的异步I/O发不出调用。已完成的异步I/O的回调函数也会得不到及时执行。

Node采用了与Web Workers相同的思路来解决单线程中大计算量的问题:child_process.

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

4.跨平台

兼容windows和*nix平台主要得益于Node在架构层面的改动,它在操作系统与Node上层模块系统之间创建了一层平台层架构,即libuv。目前,libuv已经成为许多系统实现跨平台的基础组件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

入伍击寇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值