【Node.js入门】1.1Node.js 简介
Node.js入门之—1.1Node.js 简介
文章目录
- Node.js入门之—1.1Node.js 简介
- 什么是 Node.js
- 错误说法
- Node.js 的特点
- 跨平台
- 三方类库
- 自带http服务器
- 非阻塞I/O
- 事件驱动
- 单线程
- Node.js 的应用场合
- 适合用Node.js的场合
- 不适合用Node.js的场合
- 弥补Node.js不足的解决方案
什么是 Node.js
- Node.js简称Node,是一个可以使JavaScript运行在服务器端的开发平台。
- JavaScript本是一种Web前端语言,Node.js让JavaScript成为服务器端脚本语言。
- Node.js选择JavaScript作为实现语言的原因:
- JavaScript满足CommonJS标准,符合事件驱动,用户较多且门槛较低;
- Chrome的V8引擎具有出色的性能。
- Node.js将V8引擎封装起来,作为服务器运行平台,以执行JavasScript编写的后端脚本程序。
nodejs 其实就是一款软件,其架构跟浏览器很相识,通常拿来跟谷歌浏览器对比。

错误说法
Node.js是一门编程语言? ×
Node.js 是新版本的 JavaScript? ×
- Node.js运行时环境包含执行JavaScript程序所需的一切条件。该引擎会将JavaScript代码转换为更快的机器码。
- Node.js进一步提升JavaScript的能力,使JavaScript可以访问文件、读取数据库、访问进程,从而胜任后端任务。
- 使用Node.js 的最大优点是开发人员可以在客户端和服务器端编写JavaScript,打通了前后端。
- Node.js发展迅速,目前已成为JavaScript服务器端运行平台的事实标准。
Node.js 的特点
跨平台
- Node.js是跨平台的,能运行在Windows、macOS和Linux平台上。
三方类库
- Node.js除了自己的标准类库之外,还可使用大量的第三方模块系统来实现代码的分享和重用。
自带http服务器
- 与其他后端脚本语言不同的是,Node.js内置了处理网络请求和响应的函数库,也就是自备了HTTP服务器,所以不需要额外部署HTTP服务器。

非阻塞I/O
- 非阻塞I/O又称异步式I/O,是Node.js的重要特点。
- 阻塞I/O是指线程在执行过程中遇到I/O操作时,操作系统会撤销该线程的CPU控制权,使其暂停执行,处于等待状态,同时将资源转让给其他线程。
- 非阻塞I/O是指当线程遇到I/O操作时,不会以阻塞方式等待I/O操作完成或数据返回,而只是将I/O请求转发给操作系统,继续执行下一条指令。

事件驱动
- 非阻塞I/O是一种异步方式的I/O,与事件驱动密不可分。
- 事件驱动以事件为中心,Node.js将每一个任务都当成事件来处理。Node.js在执行过程中会维护一个事件队列,需执行的每个任务都会加入事件队列并提供一个包含处理结果的回调函数。
- 在事件驱动模型中,会生成一个事件循环线程来监听事件,不断地检查是否有未处理的事件。
- Node.js的异步机制是基于事件的,所有磁盘I/O、网络通信、数据库查询事件都以非阻塞的方式请求,返回的结果由事件循环线程来处理。

单线程
- Node.js的应用程序是单进程、单线程的,但是通过事件和回调支持并发,性能变得非常高。
- 在阻塞模式下,一个线程只能处理一项任务,要想提高吞吐量必须使用多线程。
- 在非阻塞模式下,线程不会被I/O操作阻塞,该线程所使用的CPU核心利用率永远是100%,I/O操作以事件的方式通知操作系统。
- Node.js在主线程中维护一个事件队列,当接收到请求后,就将该请求作为一个事件放入该队列中,然后继续接收其他请求。
- Node.js内部通过线程池来完成非阻塞I/O操作,Node.js的单线程是指对JavaScript层面的任务处理是单线程的,而Node.js本身是一个多线程平台。
Node.js采用非阻塞I/O与事件驱动相结合的编程模式,与传统同步I/O线性编程思维有很大的不同,Node.js程序的控制很大程度要依靠事件和回调函数,这不符合开发人员的常规线性思路,需要将一个完整的逻辑拆分为若干单元(事件),从而增加了开发和调试的难度。
Node.js 的应用场合
适合用Node.js的场合
- REST API:REST API是一种前后端分离的应用程序架构。
- 单页Web应用:加载单个HTML页面,并在用户与应用程序交互时动态更新该页面的Web应用程序。
- 统一Web应用的UI层:Node.js是面向服务的架构,其能够更好地实现前后端的依赖分离,可以将所有的关键业务逻辑都封装成REST API,UI层只需要考虑如何用这些API构建具体的应用。
- 准实时系统:如聊天系统、微博系统、博客系统的准实时社交系统,特点是轻量级、高流量,没有复杂的计算逻辑。
- 游戏服务器:程序员不必使用C语言就能开发游戏的服务器程序。
微服务架构:Node.js也可用于实现基于微服务架构的应用。
不适合用Node.js的场合
- 数据加密和解密。
- 数据压缩和解压。
- 模板渲染。
弥补Node.js不足的解决方案
| 存在的问题 | 解决方案 |
|---|---|
| CPU密集型任务偏向于CPU计算操作,需要Node.js直接处理,在事件队列中,如果前面的CPU计算任务没有完成,那么后面的任务就会被阻塞,出现响应慢的情况,使得后续I/O操作无法发起 | 将大型运算任务分解为多个小任务,适时释放CPU计算空间资源,以免阻塞I/O调用的发起 |
| 单线程无法利用多核CPU。多CPU或多核CPU的服务器当Node.js被CPU密集型任务占用,导致其他任务被阻塞时,其他CPU核心处于闲置状态,从而造成资源浪费;Node.js程序一旦在某个环节崩溃,整个系统都会崩溃,这会影响其可靠性 | (1)部署Nginx反向代理和负载均衡,开启多个进程,绑定多个端口(2)使用cluster模块构建应用集群,启动多个Node.js实例,开启多个进程以监听同一个端口 |
相关文章:
【Node.js入门】1.1Node.js 简介
Node.js入门之—1.1Node.js 简介 文章目录 Node.js入门之—1.1Node.js 简介什么是 Node.js错误说法 Node.js 的特点跨平台三方类库自带http服务器非阻塞I/O事件驱动单线程 Node.js 的应用场合适合用Node.js的场合不适合用Node.js的场合弥补Node.js不足的解决方案 什么是 Node.j…...
数据库 高阶语句
目录 数据库 高阶语句 使用select 语句,用order by来对进行排序 区间判断查询和去重查询 如何对结果进行分组查询group by语句 limit 限制输出的结果记录,查看表中的指定行 通配符 设置别名:alias 简写就是 as 使用select 语句&#x…...
jenkins Java heap space
jenkins Java heap space,是内存不够。 两个解决方案: 一,修改配置文件 windows系统中,找到Jenkins的安装路径, 修改jenkins.xml 将 -Xmx256m 改为 -Xmx1024m 或者更大 重启jenkins服务。 二,jenkins增…...
OpenCV校准棋盘集合
棋盘格可以与相机校准工具一起使用,例如ROS的camera_calibration包。您可以通过单击下面的任何链接免费下载 PDF 格式的各种棋盘,没有水印或广告。此外,还添加了基于 JavaScript 的棋盘生成器,允许您生成自定义尺寸。 提示&#…...
使用git将本地项目推送到远程仓库github
总结:本地项目通过git上传到github 1)、在本地创建一个版本库(即文件夹),通过 git init 把它变成Git仓库; 2)、把项目复制到这个文件夹里面,再通过 git add . 把项目添加到仓库; 3)、再通过 gi…...
Mybatis-Plus使用Wrapper自定义SQL
文章目录 准备工作Mybatis-Plus使用Wrapper自定义SQL注意事项目录结构如下所示domain层Controller层Service层ServiceImplMapper层UserMapper.xml 结果如下所示:单表查询条件构造器单表查询,Mybatis-Plus使用Wrapper自定义SQL联表查询不用,My…...
仿mudou库one thread one loop式并发服务器
目录 1.实现目标 2.HTTP服务器 实现高性能服务器-Reactor模型 模块划分 SERVER模块: HTTP协议模块: 3.项目中的子功能 秒级定时任务实现 时间轮实现 正则库的简单使用 通⽤类型any类型的实现 4.SERVER服务器实现 日志宏的封装 缓冲区Buffer…...
二十三种设计模式全面解析-组合模式与装饰器模式的结合:实现动态功能扩展
在前文中,我们介绍了组合模式的基本原理和应用,以及它在构建对象结构中的价值和潜力。然而,组合模式的魅力远不止于此。在本文中,我们将继续探索组合模式的进阶应用,并展示它与其他设计模式的结合使用,以构…...
智慧城市建设解决方案分享【完整】
文章目录 第1章 前言第2章 智慧城市建设的背景2.1 智慧城市的发展现状2.2 智慧城市的发展趋势 第3章 智慧城市“十二五”规划要点3.1 国民经济和社会发展“十二五”规划要点3.2 “十二五”信息化发展规划要点 第4章 大数据:智慧城市的智慧引擎4.1 大数据技术—智慧城…...
unity - Blend Shape - 变形器 - 实践
文章目录 目的Blend Shape 逐顶点 多个混合思路Blender3Ds maxUnity 中使用Project 目的 拾遗,备份 Blend Shape 逐顶点 多个混合思路 blend shape 基于: vertex number, vertex sn 相同,才能正常混合、播放 也就是 vertex buffer 的顶点数…...
asp.net core mvc之路由
一、默认路由 (Startup.cs文件) routes.MapRoute(name: "default",template: "{controllerHome}/{actionIndex}/{id?}" ); 默认访问可以匹配到 https://localhost:44302/home/index/1 https://localhost:44302/home/index https:…...
前端设计模式之【访问者模式】
文章目录 前言介绍实现优缺点应用场景后言 前言 hello world欢迎来到前端的新世界 😜当前文章系列专栏:前端设计模式 🐱👓博主在前端领域还有很多知识和技术需要掌握,正在不断努力填补技术短板。(如果出现错误&#…...
通过docker-compose部署elk日志系统,并使用springboot整合
ELK是一种强大的分布式日志管理解决方案,它由三个核心组件组成: Elasticsearch:作为分布式搜索和分析引擎,Elasticsearch能够快速地存储、搜索和分析大量的日志数据,帮助用户轻松地找到所需的信息。 Logstash…...
【NLP】特征提取: 广泛指南和 3 个操作教程 [Python、CNN、BERT]
什么是机器学习中的特征提取? 特征提取是数据分析和机器学习中的基本概念,是将原始数据转换为更适合分析或建模的格式过程中的关键步骤。特征,也称为变量或属性,是我们用来进行预测、对对象进行分类或从数据中获取见解的数据点的…...
数据结构-单链表
1 链表的概念及结构 概念:链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的 。 从以上图片可以看出: 1.链式结构在逻辑上是连续的,但在物理上不一定是连续的。 2.现实中的节…...
红队系列-IOT安全深入浅出
红队专题 设备安全概述物联网设备层次模型设备通信模型 渗透测试信息收集工具 实战分析漏洞切入点D-link 850L 未授权访问 2017 认证绕过认证绕过 D-link DCS-2530Ltenda 系列 路由器 前台未授权RTSP 服务未授权 访问 弱口令命令注入思科 路由器 固件二进制 漏洞 IoT漏洞-D-Lin…...
亚数受邀参加“长三角G60科创走廊量子密码应用创新联盟(中心)”启动仪式
11月8日,在第六届中国国际进口博览会2023长三角G60科创走廊高质量发展要素对接大会上,亚数信息科技(上海)有限公司CEO翟新元作为密码企业代表之一受邀参加“长三角G60科创走廊量子密码应用创新联盟(中心)”…...
直方图学习
直方图均衡化(Histogram Equalization)是一种用于增强图像对比度的图像处理技术,通过重新分配图像的像素值,使图像中的亮度级别更加均匀,以改善图像的视觉质量。下面是进行直方图均衡化的一般步骤: 计算原始…...
Java / Android 多线程和 synchroized 锁
s AsyncTask 在Android R中标注了废弃 synchronized 同步 Thread: thread.start() public synchronized void start() {/*** This method is not invoked for the main method thread or "system"* group threads created/set up by the VM. Any new functionali…...
基于51单片机的万年历-脉搏计仿真及源程序
一、系统方案 1、本设计采用51单片机作为主控器。 2、DS1302采集年月日时分秒送到液晶1602显示。 3、按键年月日时分秒,心率报警上下限。 4、红外对接管传感器采集心率送到液晶1602显示。 5、心率低于下限或高于上限,蜂鸣器报警。 二、硬件设计 原理图如…...
嵌入式C代码如何喂饱轻量级大模型?:揭秘ARM Cortex-M7上LLM推理延迟从2800ms压至197ms的7个关键编译器指令级优化
第一章:嵌入式C语言与轻量级大模型适配性能调优指南在资源受限的嵌入式设备(如 Cortex-M7、ESP32-S3 或 RISC-V MCU)上部署轻量级大模型(如 TinyLlama、Phi-3-mini、TinyBERT)时,C语言仍是底层推理引擎的核…...
如何5分钟破解8大网盘限速?LinkSwift网盘直链下载助手完整指南
如何5分钟破解8大网盘限速?LinkSwift网盘直链下载助手完整指南 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘…...
收藏!码农的未来:AI时代,程序员如何逆袭成为“价值担当“?
AI正重构程序员行业,初级岗位需求下降30%,效率提升却未惠及所有人。高级程序员从"写代码者"转变为"AI审阅师",需掌握复杂系统协调与问题优化能力。AI虽能生成代码,但成本高昂且难达最优解,人类在业…...
FPGA实现UDP/IP协议栈,为什么我建议你从校验和与ARP缓存设计开始?
FPGA实现UDP/IP协议栈:从校验和与ARP缓存设计的核心陷阱突破 在FPGA上实现完整的UDP/IP协议栈时,许多开发者往往陷入一个误区——过早关注协议格式解析而忽视底层关键模块的健壮性设计。本文将聚焦两个最容易被低估却决定系统稳定性的核心组件࿱…...
手机耳机麦克风(ECM)电路设计实战:从差分走线到射频干扰滤波,一个电阻引发的灵敏度问题
手机耳机麦克风电路设计实战:从差分走线到射频干扰的精细调控 在智能手机的音频系统中,耳机麦克风电路设计往往被工程师视为"简单任务",直到产品测试阶段出现灵敏度不足、噪声干扰等问题时才意识到其复杂性。驻极体电容麦克风(ECM)…...
机器学习训练的环境代价与可持续优化策略
1. 机器学习训练的环境影响现状2013年至2025年间,NVIDIA工作站显卡的运算效率(GFLOPs/W)提升了约100倍,但全球机器学习训练的总能耗却增长了近1000倍。这种看似矛盾的现象揭示了技术进步背后隐藏的环境代价。以典型的1750亿参数语…...
SAP CPI实战:手把手教你用Content Modifier和Groovy脚本搞定数据转换(附避坑指南)
SAP CPI实战:Content Modifier与Groovy脚本在数据转换中的高阶应用 在SAP Cloud Platform Integration(CPI)的日常开发中,数据格式转换是每个集成开发者必须掌握的核心技能。面对复杂的业务场景,如何在图形化配置与脚本…...
QT6.1.2安装后,第一件事该做什么?从环境变量配置到创建第一个Hello World项目
QT6.1.2安装后环境配置与首个项目实战指南 当你完成QT6.1.2的安装,面对Qt Creator的空白界面时,可能会感到一丝茫然。别担心,这是每个开发者都会经历的阶段。本文将带你完成从环境验证到第一个Hello World项目的完整流程,让你快速…...
融合进化:遗传模拟退火算法在复杂优化问题中的实战解析
1. 当遗传算法遇上模拟退火:为什么需要融合进化? 第一次接触遗传模拟退火算法(GSAA)是在解决一个物流配送中心的选址问题时。当时纯遗传算法总是卡在某个局部最优解,而模拟退火又难以突破初始解的局限。这种困境让我意…...
Vivado 中 Xilinx DDR4 MIG 的实战配置与性能调优
1. DDR4 MIG IP核基础配置 在Vivado中配置DDR4 MIG(Memory Interface Generator)IP核是搭建高速存储系统的第一步。我最近在一个数据采集项目中就遇到了这个需求,当时需要处理每秒超过5GB的传感器数据流。下面分享我的实战经验,帮…...
