Node.js的特点

  Node.ji的强大功能体现在很多方面,如事件驱动、异步处理、非阻塞I/O等。在这里将介绍Node.js具备的不同于其它框架的特点。

1、事件驱动

     在某一些传统语言的网络编程中,我们会用到回调函数,比如当Socket资源达到某种状态的时,注册的回调函数就会执行。Node.js的设计思想以事件驱动为核心,它提供的绝大多数API都是基于事件的、异步的风格。以Net模块为例子,其中的net.Socket对象有以下的事件:connect、data、end、timeout、drain、error、close等。使用Node.js的开发人员需要根据自己的业务逻辑注册相应的回调函数。这些回调函数都是异步执行的。这意味着虽然在代码结构中这些函数是依次注册的,但是它们并不依赖于自身出现的顺序,而是等待相应的事件触发。

       事件驱动的优势在于充分利用了系统资源,执行代码无须等待某种操作完成,有限的资源可以用于其他的任务。Node.js的目标是为后端的网络服务编程,在服务器的开发中,并发的请求处理是一个大问题,阻塞式的函数会导致资源的浪费和时间的延迟。通过事件的注册、异步函数,开发人员可以提高资源的利用率,性能也会改善。

 

2、异步、非阻塞I/O

       在Node.js提供的支持模块中,我们可以看到包括文件在内的许多函数都是异步执行的,这与传统语言有着一定的区别。为了方便服务器的开发,Node.js的网络模块特别多,包括HTTP、DNS、net、UDP、HTTPS、TLS等 ,开发人员可以快速的构建web服务器。

一个异步I/O的大致流程:

 

(1) 发起I/O调用

  • 用户通过JavaScript代码调用Node核心模块,将参数和回调函数传入核心模块。
  • Node核心模块会将传入的参数和回调函数封装成一个请求对象。
  • 将这个请求对象推入I/O线程池等待执行。
  • JavaScript发起的异步调用结束,JavaScript线程继续执行后续操作。

(2)执行回调

  •     I/O操作完成后会将结果存储到请求对象的result属性上,并发出操作完成的通知。
  • 每次事件循环时会检查是否有完成的I/O操作,如果有就将请求对象加入观察者队列中,之后当做事件处理。
  • 处理I/O观察者事件时会取出之前封装在请求对象中的回调函数,执行这个回调函数,并将result当做参数,以完成JavaScript回调的目的。

 

3、性能出众

         Node.js在设计上以单进程、单线程模式运行。事件驱动机制是Node.js通过内部单线程高效率的维护事件循环队列实现的,没有多线程的资源占用和上下文切换。面对大规模的HTTP请求,Node.js是凭借事件驱动来完成的。

 

4、单线程

     这里的单线程是指主线程为“单线程”,所有的阻塞部分交给部分的线程池处理,然后这个主线程通过一个队列跟线程池协作,Node.js以单线程为基础的,这个正是Node.js保持轻量级和高性能的关键。

 

    

 

转载于:https://www.cnblogs.com/jiguiyan/p/11189019.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值