node相关

文章目录

  • nodeJS是什么?
  • 优缺点
  • 使用场景
  • 全局对象
  • 适合用于构建 I/O 密集型
  • 不适用于计算密集型任务

nodeJS是什么?

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时环境,它是跨平台和开源的。 Node.js 使用高效、轻量级的事件驱动、非阻塞 I/O 模型。它的包生态系统,npm,是目前世界上最大的开源库生态系统。
特点:

  • 非阻塞异步I/O:在做I/O操作的时候不会造成任何的阻塞,当完成之后,以时间的形式通知执行操作
    🌰:例如在执行了访问数据库的代码之后,将立即转而执行其后面的代码,把数据库返回结果的处理代码放在回调函数中,从而提高了程序的执行效率
  • 事件驱动:当进来一个新的请求的时,请求将会被压入一个事件队列中,然后通过一个循环来检测队列中的事件状态变化,如果检测到有状态变化的事件,那么就执行该事件对应的处理代码,一般都是回调函数
    🌰:比如读取一个文件,文件读取完毕后,就会触发对应的状态,然后通过对应的回调函数来进行处理

和js的区别
在这里插入图片描述

优缺点

  • 优点:

    • 高性能:Node.js采用事件驱动、异步编程模型,能够处理大量并发请求,具有较高的性能。
    • 跨平台:Node.js可以在多个操作系统上运行,包括Windows、Linux、Mac OS等。
    • 生态系统丰富:Node.js拥有庞大的开源社区,提供了大量的模块和工具,方便开发人员快速构建应用程序。
    • 易于学习:Node.js使用JavaScript语言,对于前端开发人员来说,学习成本较低。
  • 缺点:

    • 单线程:Node.js采用单线程模型,如果某个请求阻塞了线程,会影响整个应用程序的性能。
    • 不适合CPU密集型任务:由于Node.js采用单线程模型,不适合处理CPU密集型任务,例如图像处理、视频编码等。
      回调函数嵌套:由于Node.js采用异步编程模型,代码中会出现大量的回调函数嵌套,导致代码可读性较差。

使用场景

具体使用场景:

  • 第一大类:用户表单收集系统、后台管理系统、实时交互系统、考试系统、联网软件、高并发量的web应用程序
  • 第二大类:基于web、canvas等多人联网游戏
  • 第三大类:基于web的多人实时聊天客户端、聊天室、图文直播
  • 第四大类:单页面浏览器应用程序
  • 第五大类:操作数据库、为前端和移动端提供基于json的API

全局对象

Nodejs中的全局对象是 global

  • Class:Buffer
  • process
  • console
  • clearInterval、setInterval
  • clearTimeout、setTimeout
  • global

适合用于构建 I/O 密集型

🌰:网络服务器、数据库系统和文件传输等

原因:从上面的分析中我们知道Node会将所有的I/O操作通过libuv的多线程能力分散到不同的线程里面执行,其余的操作都放在主线程里面执行。那么为什么这种做法就比Java或者Golang等其它语言更适合做I/O密集型应用呢?我们以开发Web服务为例,Java和Golang等主流后端编程语言的并发模型是基于线程(Thread-Based)的,这也就意味他们对于每一个网络请求都会创建一个单独的线程来处理。可是对于Web应用来说,主要还是对数据库的增删改查,或者请求其它外部服务等网络I/O操作,而这些操作最后都是交给操作系统的系统调用来处理的(无需应用线程参与),并且十分缓慢(相对于CPU时钟周期来说),因此被创建出来的线程大多数时间是无事可做的而且我们的服务还要承担额外的线程切换开销。和这些语言不一样的是Node没有为每个请求都创建一个线程,所有请求的处理都发生在主线程中,因此没有了线程切换的开销,并且它还会通过线程池的形式异步处理这些I/O操作,然后通过事件的形式告诉主线程结果从而避免阻塞主线程的执行,因此它理论上是更高效的。这里值得注意的是我只是说Node理论上是更快的,实际上真不一定。这是因为现实中一个服务的性能会受到很多方面的影响,我们这里只是考虑了并发模型这一个因素,而其它因素例如运行时消耗也会影响到服务的性能,举个例子,JavaScript是动态语言,数据的类型需要在运行时进行推断,而Golang和Java都是静态语言它们的数据类型在编译时就可以确定,所以它们实际执行起来可能会更快,占用内存也会更少。

不适用于计算密集型任务

🌰:数据处理、图像处理、加密解密
NodeJS 的非阻塞机制使其即使仅能使用单个线程但仍能应对高并发量的场景,但也正是因为其仅能使用单个线程,无法充分利用多核 CPU 的带来的性能优势,所以其不适用于 计算密集型 的 WEB 应用程序。

原因:上面我们提到Node除了I/O相关的操作其余操作都会在主线程里面执行,所以当Node要处理一些CPU密集型的任务时,主线程会被阻塞住。
Node这种基于事件循环的单线程执行环境才会有这种问题,Java和Golang等Thread-Based语言是不会存在这种问题的。
解决方案:Cluster Module,Child Process和Worker Thread

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

性能分析-CPU知识

目录 CPU知识 cpu组成 查看cpu信息: top命令中 cpu相关: top命令看到系统负载: CPU负载 IO负载 上下文: CPU的寄存器和程序计数器----在cpu的控制器中 实战演示分析 top命令分析 arthas工具 进程上下文切换高的问题分析…

【深度学习】StableDiffusion的组件解析,运行一些基础组件效果

文章目录 前言vaeclipUNetunet训练帮助、问询 前言 看了篇文: https://zhuanlan.zhihu.com/p/617134893 运行一些组件试试效果。 vae 代码: import torch from diffusers import AutoencoderKL import numpy as np from PIL import Image# 加载模型…

[AIGC] Spring 获取前端请求参数的全面指南

在Spring框架中,我们有多种方式可以获取前端发来的请求参数。以下是一些常用的方法: 文章目录 1. 通过RequestParam注解2. 通过HttpServletRequest对象3. 通过PathVariable注解4. 通过ModelAndView对象5. 通过WebRequest对象 1. 通过RequestParam注解 使…

neo4j图数据库下载安装配置

neo4j下载地址Index of /doc/neo4j/3.5.8/ 1.说明:jdk 1.8 版本对应的 neo4j 数据库版本 推荐安装3.X版本 2.配置系统环境变量 3.启动 neo4j.bat console 4.访问

算法设计与分析(实验5)-----图论—桥问题

一.实验目的 掌握图的连通性。掌握并查集的基本原理和应用。 二.实验步骤与结果 1.定义 (1)图的相关定义 图:由顶点的有穷非空集合和顶点之间的边的集合组成。 连通图:在无向图G中,若对于…

为什么苹果 Mac 电脑需要使用清理软件?

尽管 Apple Mac 电脑因其卓越的性能、简洁高效的 macOS 操作系统及独特的美学设计备受全球用户青睐,但任何电子设备在长期使用后都难以避免面临系统资源日渐累积的问题。其中一个重要维护需求在于,随着使用时间的增长,Mac电脑可能会由于系统垃…

xss基础

第一关&#xff1a; html部分标签可以解析js <script>alert (1)</script> 第二关&#xff1a; 可以看到value用双引号闭合了&#xff0c;使用上一关的payload没用&#xff0c;尝试一下闭合这个input 所以使用双引号和>闭合后再加入上一关的payload 11"…

深入浅出 -- 系统架构之负载均衡Nginx缓存机制

一、Nginx缓存机制 对于性能优化而言&#xff0c;缓存是一种能够大幅度提升性能的方案&#xff0c;因此几乎可以在各处都能看见缓存&#xff0c;如客户端缓存、代理缓存、服务器缓存等等&#xff0c;Nginx的缓存则属于代理缓存的一种。对于整个系统而言&#xff0c;加入缓存带来…

机器学习(30)

文章目录 摘要一、文献阅读1. 题目2. abstract3. 网络架构3.1 Sequence Generative Adversarial Nets3.2 SeqGAN via Policy Gradient3.3 The Generative Model for Sequences3.4 The Discriminative Model for Sequences(CNN) 4. 文献解读4.1 Introduction4.2 创新点4.3 实验过…

GaN肖特基势垒二极管(SBD)的多阴极应用建模与参数提取

GaN Schottky Barrier Diode (SBD) Modeling and Parameter Extraction for Multicathode Application&#xff08;TED 24年&#xff09; 摘要 本文提出了一种适用于多阴极应用的紧凑型可扩展GaN肖特基二极管大信号模型。详细给出了外在和内在模型参数的可扩展规则。实验和理…

Tesseract 安装与配置及验证码识别

Tesseract 安装与配置 Tesseract 的使用&#xff0c;需要环境的支持&#xff0c;以实现简单的转换和训练。 1.环境 python版本&#xff1a;3.8.3 &#xff08;python2.7或3以上&#xff09; 操作系统&#xff1a;windows系统 2.Python安装 详见&#xff1a;Miniconda的…

ArcGIS Server 安装教程

​​​​​​​ 一、环境与文件准备 1.软件环境 已安装arcgis Desktop 10.2 2.安装及授权文件 二、安装步骤 1.下载安装包和授权文件&#xff0c;解压后打开ArcGIS Server10.2文件夹&#xff0c;打开ESRI.exe。 2.点击ArcGIS for Server后的Setup&#xff0c;开始安装。 3.…