初识 Node.js
简介
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相关推荐
- 初识Node.js之Node.js与java作为后台服务器的对比
最近去了新公司,又拾起了被我抛下许久的后端了,不过因为公司的需求,后端采用Node.js,最近一直在学习Node.js,随着逐渐深入的了解,发现真的Node.js能越来越变得热门是有其存在的道理的.可 ...
- 【Node.js】初识Node.js
系列文章目录 文章目录 系列文章目录 一.什么是 Node.js 二.下载和安装 Node.js 1.普通方式 2.使用 nvm 安装 三.Node.js 和 JavaScript 的区别 1.ECM ...
- 【Node.js】第一章 初识Node.js
目录 1.1 浏览器中的javascript的运行环境 1.2 Node.js 简介 1.1 浏览器中的javascript的运行环境 1. 浏览器的组成部分 2. javascript能在浏览器执 ...
- 1.初识Node.js
由于浏览器中有Javascript解析引擎,所以写的javascript可以在浏览器中执行,不同的浏览器有不同的JS解析引擎.由于浏览器内置了DOM,BOM,AJAX这种API,所以JS才能使用他们. ...
- 初识node.js(1)
什么是 node ? 一个基于 ChromeV8 解析引擎的 JavaScript 运行时环境,运行在电脑操作系统中. 前端 js 和 nodeJS 的区别 前端JS 当 js 被引入 html 页面 ...
- 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 ...
- Node.js -- JavaScript的运行环境
一初识Node.js 1.前端三剑客 HTML : 骨架 CSS :外观 JS : 灵魂 2.浏览器中JavaScript的组成部分 JavaScript可以在浏览器中被执行的原因是浏览器里面都有一个 ...
- 万字长文--详解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 模 ...
- 前后端交互学习笔记(二):Node.js及npm学习
Node.js及npm 文章目录 Node.js及npm 复习引入 初识node.js fs文件系统模块 path路径模块 http模块 创建web服务器 根据不同url设置响应代码模板 模块化学习 ...
- 【Node.js】node入门全攻略
文章目录 一.初识 Node.js (一)JS 解析引擎 (二)JS 运行环境 (三)Node.js 1.作用 2.命令 二.fs 文件系统模块 (一)fs 模块 (二)方法 1.fs.readFil ...
最新文章
- How to Increase the Memory Limit for 32-bit Applications in Windows 64-bit OS
- 快速了解什么是自然语言处理
- 页面定时跳转(读秒)
- MapReduce原理及其主要实现平台分析
- ROS kinect:OpenNI读取深度图像与彩色图像
- 在xml文件中使用typeAliases标签报错The content of element type “configuration“ must match “(properties?,setting
- ubuntu网站做图像外链
- jsp访问web-inf下的spring配置文件
- C#报表控件ReportViewer
- 编程数学课:万万没想到,他们都用这个方式学好了数学
- mysql 校对规则_MySQL:校对规则
- 纸张的规格:A3.A4.A5.A6纸的尺寸大小
- OA系统的主要功能和作用是什么
- centos7 下greenplum 安装初始化使用
- 桌面计算器The C++ Programming Language程序解析
- Win7更换锁屏壁纸
- 如何搭建Telegram群机器人
- R语言数据分析笔记——t检验(含正态性检验和方差齐性检验在SPSS和R语言中的操作t检验(单样本、双独立样本、配对样本)在Excel、SPSS、R语言中的操作)
- python整段注释_python段注释
- (二十三)SpringMvc的控制器是不是单例模式,如果是,有什么问题,怎么解决?
热门文章
- 酷炫的外部开启Activity新姿势
- 打砖块游戏代码 c语言,打砖块游戏的源代码(请多指教)
- 3dmax导出fbx没有贴图_实例讲解ArcGIS 与 3DMax 结合建模
- 安装linux没有raid驱动程序,LINUX 无法在 RAID 上安装的问题
- java案例代码5--编码的方式--密码
- Python 爬虫经常需要睡眠防止被封IP time sleep
- python php mysql_Python 操作 MySQL 的正确姿势
- CV进阶 -- 目标检测原理及代码实现、YOLO源码解读学习
- Python数据分析处理库——Pandas
- linux下目录简介——/proc