【Node.js入门】1.1Node.js 简介

news2024/11/24 14:49:17

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编写的后端脚本程序。

错误说法

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服务器。

Node.js与PHP对HTTP请求的处理

非阻塞I/O

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

事件驱动

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

单线程

  • 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实例,开启多个进程以监听同一个端口

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1184080.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何利用ChannelPipeline在Netty中搭建无懈可击的数据处理流水线?

在上篇文章(Netty 入门 — ChannelHandler, Netty 的数据加工厂)提到 ChannelHandler 虽然是一个好的打工人,但是在我们实际业务线中,他不可能一个人干所有的活啊,毕竟都 21 世纪了,我们是要讲究…

通过对多个思维链进行元推理来回答问题11.8

通过对多个思维链进行元推理来回答问题 摘要1 引言2 背景3 方法3.1 生成推理链3.2 对推理链进行元推理 4 实验4.1 实验设置4.1.1 数据集4.1.2 方法 摘要 现代的多跳问题回答(QA)系统通常将问题分解为一系列推理步骤,称为思维链(C…

基于SSM的旅游管理系统的设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用JSP技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…

el-select下拉框默认显示全部选项

这里一直不默认显示全部,但这部分代码是正确的, 经过查询发现: 所以找到了这段: 发现之前role_id和status是 修改成0后就可以默认选中全部选项了

程序设计:控制台输出二叉树 二叉树的形象显示

本文指导你编写一个输出到字符控制台的形象的二叉树展示。 目录 一般的Tree显示方式 理想的显示方式 实现方法 计算显示位置 输出数据 计算显示位置的代码 输出数据的代码 一般的Tree显示方式 编写二叉树算法时调试是很头疼的,如何显示成一目了然的树结构呢…

C/C++轻量级并发TCP服务器框架Zinx-游戏服务器开发003:架构搭建-需求分析及TCP通信方式的实现

文章目录 1 项目总体架构2 项目需求2.1 服务器职责2.2 消息的格式和定义 3 基于Tcp连接的通信方式3.1 通道层实现GameChannel类3.1.1 TcpChannel类3.1.2 Tcp工厂类3.1.3 创建主函数,添加Tcp的监听套接字3.1.4 代码测试 3.2 协议层与消息类3.2.1 消息的定义3.2.2 消息…

算法训练 第六周

一、用栈实现队列 本题要求我们使用栈这个数据结构来模拟实现队列的各种操作,我们的具体思路是使用两个栈,将一个栈当作输入栈,用于压入 push传入的数据;另一个栈当作输出栈,用于 pop和 peek 操作。每次 pop 或 peek 时…

CHOME、EDGE无法打开网页问题处理方法

最近有多位同时反馈CHOME/EDGE无法打开网页,如下提示 右键点CHOME/EDGE图标,在属性-兼容性,勾上以兼容模式运行这个程序,确定即可。

【Verilog 教程】7.4Verilog CIC 滤波器设计

积分梳状滤波器(CIC,Cascaded Integrator Comb),一般用于数字下变频(DDC)和数字上变频(DUC)系统。CIC 滤波器结构简单,没有乘法器,只有加法器、积分器和寄存器…

方法----JAVA

方法 使用方法提高了代码的复用性 方法的定义和调用 方法概述:JAVA 方法的调用,不调用不执行,就只会在硬盘上待着 带参方法 无参方法 无参方法 调用格式: 方法名(); 方法格式: //最简单的方法格式 public static void 方法名(){ //方法体 } 带参方法 调用格式: 方…

C语言之extern关键字实例总结(八十二)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…

HBase表数据的读、写操作与综合操作

文章目录 HBase表数据的读、写操作与综合操作一、实验目标二、实验要求及注意事项三、实验内容及步骤 附:系列文章 HBase表数据的读、写操作与综合操作 一、实验目标 熟练掌握通过HBase shell命令来设计HBase表结构实例掌握使用HBase编程创建HBase表、删除HBase表…

中国发表第一篇计算机顶会的人都怎么样了?中国ACL、AAAI、CVPR第一人是谁

夕小瑶科技说 整理 | 王二狗中国大陆发第一篇计算机顶会的人都怎么样了?相信AI从业者对这个话题都会非常感兴趣,本文对知乎上各位大佬的信息做一个整理,分享给大家。 注:信息由知乎网友整理,不保证100%准确&#xff0c…

主流新闻媒体有哪些,怎么邀约记者

主流新闻媒体是社会信息传播的重要渠道,它们拥有广泛的受众群体和影响力。邀请主流新闻媒体参与活动或报道,可以迅速扩大活动影响力,提升组织的知名度和公信力。下面介绍一些主流新闻媒体及邀约媒体的方法。 主流新闻媒体 1、电视台&#x…

算法通过村第十八关-回溯|白银笔记|经典问题

文章目录 前言组合总和问题分割回文串子集问题排序问题字母大小写全排列单词搜索总结 前言 提示:我不愿再给你写信了。因为我终于感到,我们的全部通信知识一个大大的幻影,我们每个人知识再给自己写信。 --安德烈纪德 回溯主要解决一些暴力枚举…

Find My拐杖|苹果Find My技术与拐杖结合,智能防丢,全球定位

拐杖是一种重要的医疗康复辅助用具,辅助腿脚不灵活的人群平稳的行走,避免出现摔倒等情况。目前,全球均已步入老龄化社会,那么老年人的生活质量和安全成为各国学者的关注点。由于年龄原因容易突发意外情况,如摔倒&#…

SSM大学生众筹平台-计算机毕设 附源码22506

SSM大学生众筹平台 摘 要 随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 大学生众筹平台,主要的模块包括管理员和用户及筹资用户,实现功能包括:首页、个人资料&a…

多媒体融合应急通信解决方案

近年来,随着经济社会快速发展和现代化进程加快,我国公共安全面临诸多新的挑战。面对大型安全事故发生后,救援队伍必须在恶劣的条件下迅速建立指挥调度中心,方能协调前后方救援力量,这对应急通信网络建设的可靠性、时效…

基于springboot实现智慧外贸平台系统【项目源码+论文说明】

基于springboot实现智慧外贸平台管理系统演示 摘要 网络的广泛应用给生活带来了十分的便利。所以把智慧外贸管理与现在网络相结合,利用java技术建设智慧外贸平台,实现智慧外贸的信息化。则对于进一步提高智慧外贸管理发展,丰富智慧外贸管理经…

ICC2与PT端口时序上的差别

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 拾陆楼知识星球入口 有星球成员遇到如下问题: 你好,我想问一下就是之前一直遇到一个情况:INtoReg的path_group的时序报告,ICC2里launch的clock network delay(propagated)会有一个值,skew就很小。 但是到PT里launc…