简介

Node.js 专注于实现 web 高性能的服务器,是一个让 JavaScript 运行在服务器上的平台。他使用 Chrome 浏览器的 V8 引擎作为 JS 代码的解释工具,底层使用 C++ 进行开发,而 V8 引擎也正是基于 C++ 开发的。

Node.js 并不是一种新的语言,他是基于 JavaScript 实现的,但是他让 JavaScript 焕发出了新的活力,将 JavaScript 的触角伸到了服务器端。

Node.js 和传统的服务器端程序的最大区别在于 Node.js 没有 Web 容器的概念。一般来服务器程序比如 PHP、JSP、Python、Perl、Ruby 等都需要运行在 Web 容器中才能被访问,最常用的 Web 容器比如说 Apache、Nginx 等。但是 Node.js 没有!通过对于顶层路由的设计能够制定出很简洁清晰的 URL。

特点一:单线程

Node.js 的另一大特点在于他是单线程的,整个 Node.js 程序运行在单一的一个线程上。

一个 Java Web 项目,用户发起请求会为其创建一个线程,而每一线程都需要占用一定的内存,所有对于服务器的要求会随着用户数的增加而增加,硬件成本也相应提高。同时使用多线程会存在上下文切换和线程销毁的开销,如果使用单线程就能避免这些应为多线程带来的系统开销,提高系统运行效率。

Node.js 不会为每个用户创建一个新的线程,而是使用同一个线程接收所有的请求。使用一个线程在面对多个用户请求时,Node 不能像多线程那样并行地对其进行处理。在单线程上我们顺次执行程序,在一个请求没有执行完的时候,线程就会阻塞,下一个请求就无法进行。

特点二:非阻塞式 IO

为了应付单线程的阻塞问题,Node 使用了非阻塞 I/O 机制。

处理一个请求时最耗时的操作是各种 I/O 操作,最频繁的就是对数据库的读写操作,或者是对文件的读写操作。在单线程中如果执行到 I/O 操作,则线程会在此阻塞等待返回结果。

Node 为了应付费时的 I/O 操作使用了非阻塞 I/O 模式。当程序一旦执行到了 I/O 操作的部分,则立即将 I/O 操作交给回调函数,自己则继续执行后面的程序。

这里就有两点需要注意的。

一是执行回调函数之后的代码不能依赖回调函数的结果。比如用户登录的操作,需要查询数据库验进行校验,之后的登录操作需要依赖回调的结果,此时必须等待返回校验结果才能进行登录操作。

二是执行回调函数之后何时再继续执行。所以必须要有事件循环,回过头来继续执行操作,就需要不断检查线程上有没有没有处理完的事件,排队实现他们。

因此 Node 的这条线程一直处于运行状态不会阻塞,CPU 的利用率一直很高。

特点三:事件驱动

Node 的第三个特点就是事件驱动。也就是前面讲的在线程执行 A 操作的过程中采用回调函数的形式转而处理 B 事件,在 B 事件处理完之后再去执行 B,如网上一张图片所示:

事件在循环执行之中,当遇到 I/O 操作则采用回调函数处理,处理完的事件则会排队等候再次执行,形成了一个个的事件环

Node 通过非阻塞 I/O 的机制和事件驱动的方式让单线程的程序实现了多线程的效果。让一个线程永远处于忙碌的状态,不会造成资源的浪费。这样就能降低硬件的成本却不会影响程序执行的效率。

初识 Node.js相关推荐

  1. 初识Node.js之Node.js与java作为后台服务器的对比

    最近去了新公司,又拾起了被我抛下许久的后端了,不过因为公司的需求,后端采用Node.js,最近一直在学习Node.js,随着逐渐深入的了解,发现真的Node.js能越来越变得热门是有其存在的道理的.可 ...

  2. 【Node.js】初识Node.js

    系列文章目录 文章目录 系列文章目录 一.什么是 Node.js 二.下载和安装 Node.js 1.普通方式 2.使用 nvm 安装 三.Node.js 和 JavaScript 的区别 1.ECM ...

  3. 【Node.js】第一章 初识Node.js

    目录 1.1 浏览器中的javascript的运行环境 1.2 Node.js 简介 1.1 浏览器中的javascript的运行环境 1. 浏览器的组成部分 2.  javascript能在浏览器执 ...

  4. 1.初识Node.js

    由于浏览器中有Javascript解析引擎,所以写的javascript可以在浏览器中执行,不同的浏览器有不同的JS解析引擎.由于浏览器内置了DOM,BOM,AJAX这种API,所以JS才能使用他们. ...

  5. 初识node.js(1)

    什么是 node ? 一个基于 ChromeV8 解析引擎的 JavaScript 运行时环境,运行在电脑操作系统中. 前端 js 和 nodeJS 的区别 前端JS 当 js 被引入 html 页面 ...

  6. Node.js 入门详解(一)

    目录 前言 1. 初识 Node.js 1.1 回顾与思考 1.2 Node.js 简介 1.2.1 什么是Node.js 1.2.2 Node.js 中的 JavaScript 运行环境 1.2.3 ...

  7. Node.js -- JavaScript的运行环境

    一初识Node.js 1.前端三剑客 HTML : 骨架 CSS :外观 JS : 灵魂 2.浏览器中JavaScript的组成部分 JavaScript可以在浏览器中被执行的原因是浏览器里面都有一个 ...

  8. 万字长文--详解Node.js(快速入门)

    Node.js基础与扩展 Node.js 1.初识Node.js与内置模块 1.1 Node.js初识 1.2 fs文件系统模块 1.3 path路径模块 1.4 http模块 2.模块化 2.1 模 ...

  9. 前后端交互学习笔记(二):Node.js及npm学习

    Node.js及npm 文章目录 Node.js及npm 复习引入 初识node.js fs文件系统模块 path路径模块 http模块 创建web服务器 根据不同url设置响应代码模板 模块化学习 ...

  10. 【Node.js】node入门全攻略

    文章目录 一.初识 Node.js (一)JS 解析引擎 (二)JS 运行环境 (三)Node.js 1.作用 2.命令 二.fs 文件系统模块 (一)fs 模块 (二)方法 1.fs.readFil ...

最新文章

  1. How to Increase the Memory Limit for 32-bit Applications in Windows 64-bit OS
  2. 快速了解什么是自然语言处理
  3. 页面定时跳转(读秒)
  4. MapReduce原理及其主要实现平台分析
  5. ROS kinect:OpenNI读取深度图像与彩色图像
  6. 在xml文件中使用typeAliases标签报错The content of element type “configuration“ must match “(properties?,setting
  7. ubuntu网站做图像外链
  8. jsp访问web-inf下的spring配置文件
  9. C#报表控件ReportViewer
  10. 编程数学课:万万没想到,他们都用这个方式学好了数学
  11. mysql 校对规则_MySQL:校对规则
  12. 纸张的规格:A3.A4.A5.A6纸的尺寸大小
  13. OA系统的主要功能和作用是什么
  14. centos7 下greenplum 安装初始化使用
  15. 桌面计算器The C++ Programming Language程序解析
  16. Win7更换锁屏壁纸
  17. 如何搭建Telegram群机器人
  18. R语言数据分析笔记——t检验(含正态性检验和方差齐性检验在SPSS和R语言中的操作t检验(单样本、双独立样本、配对样本)在Excel、SPSS、R语言中的操作)
  19. python整段注释_python段注释
  20. (二十三)SpringMvc的控制器是不是单例模式,如果是,有什么问题,怎么解决?

热门文章

  1. 酷炫的外部开启Activity新姿势
  2. 打砖块游戏代码 c语言,打砖块游戏的源代码(请多指教)
  3. 3dmax导出fbx没有贴图_实例讲解ArcGIS 与 3DMax 结合建模
  4. 安装linux没有raid驱动程序,LINUX 无法在 RAID 上安装的问题
  5. java案例代码5--编码的方式--密码
  6. Python 爬虫经常需要睡眠防止被封IP time sleep
  7. python php mysql_Python 操作 MySQL 的正确姿势
  8. CV进阶 -- 目标检测原理及代码实现、YOLO源码解读学习
  9. Python数据分析处理库——Pandas
  10. linux下目录简介——/proc