node相关

news2024/11/28 18:47:48

文章目录

  • 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.coloradmin.cn/o/1577681.html

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

相关文章

线性代数难学怎么办?到星河社区让飞桨来帮忙!

用飞桨帮我们好好学线性代数 参考自《动手学深度学习》第二章 《漫画线性代数》等。星河社区代码一键执行:线性代数难学怎么办?到星河社区让飞桨来帮忙! 线性代数,这个在数学领域举足轻重的学科,是众多学科的基础&am…

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

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

Shoplazza闪耀Shoptalk 2024,新零售创新解决方案引领行业新篇章!

在近期举办的全球零售业瞩目盛事——Shoptalk 2024大会上,全球*的零售技术平台-店匠科技(Shoplazza)以其*的创新实力与前瞻的技术理念,成功吸引了与会者的广泛关注。此次盛会于3月17日至20日在拉斯维加斯曼德勒湾隆重举行,汇聚了逾万名行业精英。在这场零售业的盛大聚会上,Shop…

MATLAB | 怎样绘制更有立体感的柱状图

之前写了一篇文章说明了MATLAB图例可以自己diy,这次又有了diy的机会,我开发了一个简单的小工具,能够实现绘制伪3d的柱状图,大概效果如下: 使用说明 由于涉及的代码比较接近MATLAB底层的图形对象,有点东西还…

MySQL学习笔记------事务

事务 事务是一组操作的集合,他是一个不可分割的单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败 事务操作 create table account(id int comment ID,name varchar(10) …

怎样恢复已删除的照片?教你3个方法,一键恢复!

很多人喜欢以拍照的形式记录生活,手机里的照片就很容易堆积成山,但当内存不够用时就不得不选择删除。可是这些美好的照片始终是很多人心中抹不去的记忆,那么该怎样恢复已删除的照片呢?下面几招,教你一键恢复&#xff0…

基于opencv的猫脸识别模型

opencv介绍 OpenCV的全称是Open Source Computer Vision Library,是一个跨平台的计算机视觉库。OpenCV是由英特尔公司发起并参与开发,以BSD许可证授权发行,可以在商业和研究领域中免费使用。OpenCV可用于开发实时的图像处理、计算机视觉以及…

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

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

JDK下载及安装说明

1.JDK下载 访问oracle官网:http://www.oracle.com 在首页点击Downloads,进入oracle软件下载页。 在下载页面,点击Java。 选择Java (JDK) for Developers,点击。 在 Java SE Downloads 页面,点击中间的DO…

如何挂载img镜像以及lvm分区

上一章节,我在win10下利用qemu安装了一个aarch64的 kylin-server-v10的ISO系统镜像包。安装时将系统安装到了虚拟硬盘kylin-server-v10.img 里,现在有个需求,要读出kylin-server-v10.img中文件系统的内容。 通过fdisk命令可以看到 kylin-ser…

Docker容器(六)网络配置与数据卷

一、高级网络配置 1.1概述 当 Docker 启动时,会自动在主机上创建一个 docker0 虚拟网桥,实际上是 Linux 的一个 bridge,可以理解为一个软件交换机。它会在挂载到它的网口之间进行转发。 同时,Docker 随机分配一个本地未占用的私有…

位置编码学习

基本概念 关于位置编码的一切:https://kexue.fm/archives/8130#T5%E5%BC%8F 残差连接 Post Norm 关注深度 残差的意思是给前面的层搞一条“绿色通道”,让梯度可以更直接地回传,但是在Post Norm中,这条“绿色通道”被严重削弱…

助贷行业的业务增长工具:CRM客户管理系统的核心作用与应用流程

在当前助贷行业,企业如何更好地抓住客户需求、提高业务效率、优化服务体验一直是助贷企业关注的焦点。在这个背景下,一款优秀的CRM客户管理系统无疑成为了实现这些目标的关键。本文将探讨这样一款专为助贷行业打造的CRM客户管理系统,看它是如…

极市平台 | 综述:一文详解50多种多模态图像融合方法

本文来源公众号“极市平台”,仅用于学术分享,侵权删,干货满满。 原文链接:综述:一文详解50多种多模态图像融合方法 0 极市导读 本工作总结了50篇论文中Lidar和camera的多模态融合的一些概念方法。笔者结合原文以及自…

重庆餐饮设计公司排行榜曝光,这些企业值得关注!

在如今饮食文化多元化、餐饮产业蓬勃发展的时代,餐饮设计企业扮演着至关重要的角色。一个好的餐厅设计可以为顾客提供舒适、美观的用餐环境,也能够提升餐厅的整体形象和竞争力。重庆作为中国西南地区的经济中心和旅游胜地,餐饮业发展迅速&…

用二八定律分析零售数据,不就更直观了吗?

20%的商品贡献了80%的销售金额,你会不会想知道这些商品的销售金额、毛利、销售金额累计占比、毛利累计占比,会不会想知道这些商品在各个门店的销售表现?看是否能进一步提高销售金额,提高毛利。这样的报表该怎么做?奥威…

JVM高级篇之GC

文章目录 版权声明垃圾回收器的技术演进ShenandoahShenandoah GC体验Shenandoah GC循环过程 ZGCZGC简介ZGC的版本更迭ZGC体验&使用ZGC的参数设置ZGC的调优 版权声明 本博客的内容基于我个人学习黑马程序员课程的学习笔记整理而成。我特此声明,所有版权属于黑马…

Vue - 你知道Vue中computed和watch的区别吗

难度级别:中高级及以上 提问概率:70% 二者都是用来监听数据变化的,而且在日常工作中大部分时候都只是局限于简单实用,所以到了面试中很难全面说出二者的区别。接下来我们看一下,二者究竟有哪些区别呢? 先说computed,它的主要用途是监听…

Java中网络编程,Junit单元测试详解

文章目录 软件结构C/S结构B/S结构 概述三要素IP (银行的位置)端口 (银行中某个柜台号)协议 (填写取款单的规则)TCP通信程序TCP通信原理客户端发送数据服务端接收数据过程图三次握手 Junit单元测试概述常见的注解使用断言概述使用 软件结构 C/S结构 客户…

Windows深度学习环境----Cuda version 10.2 pytorch3d version 0.3.0

Requirements Python version 3.8.5Pytorch version: pytorch1.6.0 torchvision0.8.2 torchaudio0.7.0 cudatoolkit10.2.89pytorch3d version 0.3.0Cuda version 10.2 感觉readme文件里的不适配,跟pytorch官网不同 以前的 PyTorch 版本 |PyTorch的 # CUDA 10.2 c…