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.mzph.cn/news/800276.shtml

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

相关文章

Qt使用QWidget重绘实现圆环形渐变色进度条(支持不确定进度模式)

效果如下: 从纯竖直方向顶部蓝色到底部青色的渐变。 从左上角偏左45到右下角偏右45的蓝色到青色渐变。 从左上角偏左22.5到右下角偏右22.5的蓝色到青色渐变。(这个角度渐变最好看) 可以选择添加背景图片 支持两种模式:正常进度模…

免费试用!英智未来BayStone平台提供高性能算力服务

英智未来BayStone人工智能公共服务平台聚焦全球高端算力资源,提供基于英伟达HGX1系列GPU算力服务,现面向所有政企和科研机构提供现货算力资源服务。点击申请试用 BayStone平台通过全球算力资源调度,帮助用户高效使用高端算力资源,…

TypeScript系列之-理解TypeScript类型系统画图讲解

TypeScript的输入输出 如果我们把 Typescript 编译器看成一个黑盒的话。其输入则是使用 TypeScript 语法书写的文本或者文本集合。 输出是编译之后的 JS 文件 和 .d.ts 的声明文件 其中 JS 是将来需要运行的文件(里面是没有ts语法,有一个类型擦除的操作)&#xff0…

【保姆级】国内Onlyfans如何订阅?OnlyFans订阅保姆级指南

​ 一、 Onlyfans介绍 OnlyFans是一个创立于2016年的在线平台和应用程序,它集结了众多来自健身、音乐、艺术等领域的内容创作者,呈现了他们精彩纷呈的作品。该平台颠覆了传统商业模式,为创作者提供了一个展示独特内容的舞台,用户…

【报错】Python3.9及以上相对路径导入文件夹方式

Python3.9及以上相对路径导入文件夹 python跨文件夹调用别的文件夹下的py文件或参数方式 5.7. 包相对导入 相对导入使用前缀点号。 一个前缀点号表示相对导入从当前包开始。 两个或更多前缀点号表示对当前包的上级包的相对导入,第一个点号之后的每个点号代表一级…

学python能赚钱吗???

python爬虫去哪接单 python爬虫接单的方式有两种 一,接定制需求的单子 爬虫定制的需求其实很多,比如 “爬取某某电商网站的评论”,这类需求一般是按照爬取数据量的大小来收费,价格不会太高,正常500的样子。 常见的…

个推助力小米汽车APP实现智能用户触达,打造智能出行新体验

4月3日,小米SU7首批交付仪式在北京亦庄的小米汽车工厂总装车间举行,全国28城交付中心也同步开启首批交付。随着小米SU7系列汽车的正式发售和交付,小米汽车APP迎来了用户体量的爆发式增长。 小米汽车APP是小米汽车官方推出的手机应用&#xff…

Vue - 你知道Vue组件之间是如何进行数据传递的吗

难度级别:中级及以上 提问概率:85% 这道题还可以理解为Vue组件之间的数据是如何进行共享的,也可以理解为组件之间是如何通信的,很多人叫法不同,但都是说的同一个意思。我们知道,在Vue单页面应用项目中,所有的组件都是被嵌套在App.vue内…

swampCTF 2024

swampCTF 2024 MISC Discord Challenge swampCTF{w3lc0m3_t0_th3_swamp} What the Form google form不停重定向,直接F12看一下。flag就在前端。 swampCTF{F0rm5_K33p5_D4T4_H1dd3n} OSINT Lost in Space 图片是旅行者2号,问距离地球多少个天文单…

windows下python3安装rolabelimg或者labelimg2标注斜框

1.前言 大家常用labelimg标注物体,但当目标物体是倾斜角度时,labelimg标注时会把不属于物体的一大片区域也标注,这样标注效果不大好,那么有什么工具可以标注倾斜的矩形框呢,本篇通过介绍安装rolabelimg或者labelimg2&…

创建型模式--3.工厂模式 【人造恶魔果实工厂2】

1. 简单工厂模式的弊端 在上一节简单工厂模式中,创建了一个工厂类,用于生产需要的对象,但是这种方式有一个弊端,它违反了设计模式中的开放-封闭原则,先来看相关的代码: // 恶魔果实工厂类 enum class Typ…

使用美化方法设计项目主窗体(二)

使用美化方法设计项目主窗体 分析效果图的实现 效果图: 新建 Windows 窗体 新窗体命名:FrmMain.cs修改窗体的位置:StartPosition:CenterScreen窗体的无边框设计:FormBorderStyle:none修改窗体的大小&a…

高级优化理论与方法(七)

高级优化理论与方法(七) Solving Linear EquationsCase 2TheoremKaczmarzs AlgorithmTheoremExample PseudoinverseDefinitionSpecial Case 1Special Case 2 Properties of PseudoinverseLemma 1: Unique pseudoinverseLemma 2: Full Rank Factorization…

MySQL8.3.0 主从复制方案(master/slave)

一 、什么是MySQL主从 MySQL主从(Master-Slave)复制是一种数据复制机制,用于将一个MySQL数据库服务器(主服务器)的数据复制到其他一个或多个MySQL数据库服务器(从服务器)。这种复制机制可以提供…

如何让阿里云AI001号员工帮我写代码(含IDEA插件使用)

国内首个AI程序员入职阿里云:专属工号AI001,KPI是一人写完公司20%代码。 不管是真是假,AI 程序员发展的趋势是无法改变的,小米汽车发布会上,雷军说到小米汽车工厂的自动化率达到90%以上,有些车间甚至100%的…

手术麻醉系统源码 医疗信息管理系统源码C#.net6.0+ vs2022,vscode+BS网页版 手麻系统源码

手术麻醉系统源码 医疗信息管理系统源码C#.net6.0 vs2022,vscodeB/S网页版 手麻系统源码 手术麻醉管理系统是应用于医院手术室、麻醉科室的计算机软件系统。该系统针对整个围术期,对病人进行全程跟踪与信息管理,自动集成病人HIS、LIS、RIS、PACS信息&…

jdk8新特性 方法引用

简介 lambda表达式是用来简化匿名内部类的方法引用 使用来简化 lambda表达式的 方法引用的标志 两个冒号 静态方法 静态方法 class CompareByAge {public static int compare(Student o1, Student o2) {return o1.getAge() - o2.getAge();} }静态方法引用 Arrays.sort(students…

表格比对作业指导书 使用access对excel表格数据进行比对

初级代码游戏的专栏介绍与文章目录-CSDN博客 (注:这是以前给秘书写的作业指导书,用来处理两个表格中哪些人存在、哪些人不存在。看起来当时使用的access版本是2016。access是微软office套件中的一个软件,存在于家庭版&#xff0c…

​SCP收容物041~050​

注 :此文接SCP收容物031~040,本文只供开玩笑 ,与steve_gqq_MC合作。 --------------------------------------------------------------------------------------------------------------------------------- 目录 scp-041 scp-042 scp-043 scp-044 scp-045…

二维相位解包理论算法和软件【全文翻译- 噪声滤波(3.53.6)】

3.5 噪音过滤 在本节中,我们将简要讨论相位数据的滤波问题。除了提高信噪比之外,噪声滤波还有助于减少残差的数量,从而大大简化相位解包过程。不过,我们必须注意到一个重要的问题。正如我们在第 1 章中指出的,相位本身并不是信号。它只是信号的一种属性。因此,应该过滤的…