zoukankan      html  css  js  c++  java
  • 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保持轻量级和高性能的关键。

        

  • 相关阅读:
    Codeforces Round #368 (Div. 2)D. Persistent Bookcase DFS
    POJ Sudoku 数独填数 DFS
    Memory
    UESTC 771 最大容积(前缀后缀和)
    【题解】P2916 [USACO08NOV]安慰奶牛Cheering up the Cow-C++
    Prim算法与Kruskal(没有代码)
    【题解】P1396 营救-C++
    【题解】Unit Fraction Partition-C++
    【题解】P2078 朋友-C++
    【题解】P1892 [BOI2003]团伙-C++
  • 原文地址:https://www.cnblogs.com/jiguiyan/p/11189019.html
Copyright © 2011-2022 走看看