位置: 编程技术 - 正文

Nodejs为什么选择javascript为载体语言(nodejs为什么性能这么好)

编辑:rootadmin

推荐整理分享Nodejs为什么选择javascript为载体语言(nodejs为什么性能这么好),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:nodejs wss,nodejs为什么可以作为服务器,nodejs为什么性能这么好,nodejs wss,为什么nodejs不适合大型项目,nodejs为什么可以作为服务器,nodejs为什么还要搭配nginx,为什么使用nodejs,内容如对您有帮助,希望把文章链接给更多的朋友!

我们先来看看NodeJS官网上的介绍:

  其特点为:

  1,它是一个Javascript运行环境

  2,依赖于Chrome V8引擎进行代码解释

  3,事件驱动

  4, 非阻塞I/O

  5, 轻量、可伸缩,适于实时数据交互应用

  6,单进程,单线程

  (1),Nodejs为什么选择javascript为载体语言

    事实上,在实现 Node.js 之初,作者 Ryan Dahl 并没有选择 JavaScript,他尝试过 C、Lua,皆因其欠缺一些高级语言的特性,如闭包、函数式编程,致使程序复杂,难以维护。

    而 JavaScript 则是支持函数式编程范型的语言,很好地契合了 Node.js 基于事件驱动的编程模型。加之 Google 提供的 V8 引擎,使 JavaScript 语言的执行速度大大提高。

    最终呈现在我们面前的就成了 Node.js,而不是 Node.c,Node.lua 或其他语言的实现。

  (2),Node.js不是JS应用、而是JS运行平台

    看到Node.js这个名字,初学者可能会误以为这是一个Javascript应用,事实上,Node.js采用C++语言编写而成,是一个Javascript的运行环境。

    Node.js采用了Google Chrome浏览器的V8引擎,性能很好,同时还提供了很多系统级的API,如文件操作、网络编程等。

    以下是NodeJS所涉及的全部模块:

    

    浏览器端的Javascript代码在运行时会受到各种安全性的限制,对客户系统的操作有限。

    相比之下,Node.js则是一个全面的后台运行时,为Javascript提供了其他语言能够实现的许多功能。

  (3),Node.js的特点

    Node.js在设计上也是比较创新,它以单进程,单线程模式运行(这和Javascript的运行方式是一致的),

    事件驱动机制是Node.js通过内部单线程高效率地维护事件循环队列来实现的,没有多线程的资源占用和上下文切换,这意味着面对大规模的http请求,Node.js凭借事件驱动搞定一切,

    习惯了传统语言的网络服务开发人员可能对多线程并发和协作非常熟悉,但是面对Node.js,我们需要接受和理解它的特点。

二,重要概念

  1,什么是 Event Loop ?(很重要的概念)

    Event Loop 是一个很重要的概念,指的是计算机系统的一种运行机制。

    想要理解Event Loop,就要从程序的运行模式讲起。运行以后的程序叫做进程(Process),一般情况下,一个进程一次只能执行一个任务。

    如果有很多任务需要执行,不外乎三种解决方法。

      (1),排队。因为一个进程一次只能执行一个任务,只好等前面的任务执行完了,再执行后面的任务。

      (2),新建进程。使用fork命令,为每个任务新建一个进程。

      (3),新建线程。因为进程太耗费资源,所以如今的程序往往允许一个进程包含多个线程,由线程去完成任务。

    以JavaScript语言为例,它是一种单线程语言,所有任务都在一个线程上完成,即采用上面的第一种方法。一旦遇到大量任务或者遇到一个耗时的任务,网页就会出现"假死",因为JavaScript停不下来,也就无法响应用户的行为。

    你也许会问,JavaScript为什么是单线程,难道不能实现为多线程吗?

Nodejs为什么选择javascript为载体语言(nodejs为什么性能这么好)

    这跟历史有关系:

      JavaScript语言的一大特点就是单线程,也就是说,同一个时间只能做一件事。那么,为什么JavaScript不能有多个线程呢?这样能提高效率啊。

      JavaScript的单线程,与它的用途有关。作为浏览器脚本语言,JavaScript的主要用途是与用户互动,以及操作DOM。这决定了它只能是单线程,否则会带来很复杂的同步问题。

      比如,假定JavaScript同时有两个线程,一个线程在某个DOM节点上添加内容,另一个线程删除了这个节点,这时浏览器应该以哪个线程为准?

      所以,为了避免复杂性,从一诞生,JavaScript就是单线程,这已经成了这门语言的核心特征,将来也不会改变。

      为了利用多核CPU的计算能力,HTML5提出Web Worker标准,允许JavaScript脚本创建多个线程,但是子线程完全受主线程控制,且不得操作DOM。      所以,这个新标准并没有改变JavaScript单线程的本质。

      回到EventLoop:

      单线程就意味着,所有任务需要排队,前一个任务结束,才会执行后一个任务。如果前一个任务耗时很长,后一个任务就不得不一直等着。

      如果排队是因为计算量大,CPU忙不过来,倒也算了,但是很多时候CPU是闲着的,因为IO设备(输入输出设备)很慢(比如Ajax操作从网络读取数据),不得不等着结果出来,再往下执行。

      JavaScript语言的设计者意识到,这时主线程完全可以不管IO设备,挂起处于等待中的任务,先运行排在后面的任务。等到IO设备返回了结果,再回过头,把挂起的任务继续执行下去。

      于是,所有任务可以分成两种,一种是同步任务(synchronous),另一种是异步任务(asynchronous)。同步任务指的是,在主线程上排队执行的任务,只有前一个任务执行完毕,

      才能执行后一个任务;异步任务指的是,不进入主线程、而进入"任务队列"(task queue)的任务,只有"任务队列"通知主线程,某个异步任务可以执行了,该任务才会进入主线程执行。

      如下图:

        

       只要主线程空了,就会去读取"任务队列",这就是JavaScript的运行机制。这个过程会不断重复。

三,实例讲解

  好了,“废话”不多说了,马上开始我们第一个NodeJS应用:“Hello 大熊”。

  打开你最喜欢的编辑器,创建一个HelloWorld.js文件。

  代码如下:

  我们来运行并且测试这段代码。首先,用Node.js执行你的脚本:

  打开命令行工具CMD,切换到你的工作目录,运行命令“node HelloWorld.js”

  接下来,打开浏览器访问 “Hello,大熊 !” 的网页。

  一点小的扩展知识:

  如下图所示,这是NodeJS中的http.js部分源码,createServer是一个对用户很友好的接口,内部实现采用了单例模式,这样做的好处是,把实例的创建和初始化任务进行有效的分离,职责专一,降低耦合度,这是大家平时编程时可以借鉴的思想。

  

  哈哈哈,是不是很有意思,这只是一次短暂的体验,后面会陆续讲解很多的知识点,大家慢慢体会O(∩_∩)O哈哈~

四,总体概述

  1,它是一个Javascript运行环境

  2,依赖于Chrome V8引擎进行代码解释

  3,事件驱动

  4, 非阻塞I/O

  5, 轻量、可伸缩,适于实时数据交互应用

  6,单进程,单线程

  最后我想说的话是:这篇的例子不是很多,但是这些概念相当重要,一定要有一个清晰的理解,这样为以后的NodeJS学习会打下牢固的基础的,朋友们加油一起努力。

       哈哈哈,本篇结束,未完待续,希望和大家多多交流够沟通,共同进步。。。。。。呼呼呼……(*^__^*)

Nodejs学习笔记之Global Objects全局对象 一,开篇分析在上个章节中我们学习了NodeJS的基础理论知识,对于这些理论知识来说理解是至关重要的,在后续的章节中,我们会对照着官方文档逐步

Nodejs学习笔记之Stream模块 一,开篇分析流是一个抽象接口,被Node中的很多对象所实现。比如对一个HTTP服务器的请求是一个流,stdout也是一个流。流是可读,可写或兼具两者的。

Nodejs学习笔记之NET模块 一,开篇分析从今天开始,我们来深入具体的模块学习,这篇文章是这个系列文章的第三篇,前两篇主要是以理论为主,相信大家在前两篇的学习中,

标签: nodejs为什么性能这么好

本文链接地址:https://www.jiuchutong.com/biancheng/377948.html 转载请保留说明!

上一篇:Node.js 制作实时多人游戏框架(node.js怎么用)

下一篇:Nodejs学习笔记之Global Objects全局对象(nodejs实战教程)

  • 小规模纳税人如何做账
  • 城建税和教育费附加减免政策
  • 销项税额和进项税额发票怎么区别
  • 房地产企业消防设施计入什么科目
  • 小规模纳税人如何升级为一般纳税人
  • 利润表盈利结构分析
  • 收到以前年度的政府补助会计分录
  • 房地产开发企业土地增值税清算
  • 个体工商户税收起征点是多少?
  • 长期投资计提减值准则
  • 其他应收款直接计入营业外收入
  • 返利冲抵货款会计分录
  • 抵债的货物按什么算增值税
  • 银行汇兑计入哪个会计科目?
  • 小规模文化交流活动
  • 高温气温
  • 房地产企业综合税率是多少
  • 钻井采用的主要设备
  • 小规模纳税人所得税申报表如何填写
  • 建设银行对公转账限额
  • 股权转让会计处理
  • 小型微利企业的企业所得税优惠政策
  • 发票专用章正规位置盖在哪里
  • 约定抵销与法定抵销的区别
  • Win10 Build 21354 太阳谷ISO镜像版体验报告 含下载地址
  • PHP:oci_password_change()的用法_Oracle函数
  • 苹果手机把旧手机的照片传到新手机
  • 企业所得税直接法和间接法
  • 谷歌网页小恐龙
  • php实现原理
  • 被雪覆盖的山峰
  • 不良品返修流程
  • 调整以前年度少计提的工资
  • 注销报税是什么意思
  • etc通行费发票可以抵扣吗
  • 深度学习中正样本、负样本、简单样本、困难样本的区别 (简单易懂)
  • vscode搭建vue项目
  • 深度卷积神经网络基本结构
  • vue-router + element-plus实现面包屑导航栏和路由标签栏
  • 目标检测论文解析怎么写
  • 电商后台管理系统简介
  • 自动化测试三年规划
  • 短信php源码
  • 异地托收承付结算金额起点为
  • 学电脑网站
  • 代理付银行手续费合法吗
  • 增值税进项税额在借方还是贷方
  • c语言中数组怎么用
  • mysql常见优化手段
  • 电脑word怎么学
  • 企业汇兑收益所得税税率
  • 建筑行业 营改增
  • 低值易耗品摊销方法有几种
  • 装修费还没摊销怎么办
  • 在建工程的成本包括应交增值税吗
  • 金税盘年服务费账务处理
  • 收到支持学校工作的短信怎么回复
  • 2023年职工养老保险缴费标准
  • 印花税税率是多少
  • 金融资产或金融负债初始入账价值
  • 工程物资盘盈为什么冲减在建工程
  • 会计存货包括生产成本
  • 银行固定资产有哪些
  • excel日记账系统的设置
  • mac虚拟机安装教程win10正版
  • win8系统如何分区
  • 微软推送win10更新 蓝牙
  • win8桌面不见了
  • 判断输入的日期是一年中第几天
  • jquery2
  • 获取linux命令执行结果
  • Scrapy框架可以用于数据挖掘、监测和自动化测试
  • 批处理执行另一个批处理
  • meta-inf文件夹在哪
  • jquery中如何获取元素?
  • js匿名函数和箭头函数
  • 给个人佣金怎么避税
  • 湖南省国家税务局历任局长
  • 金融机构不包括
  • 建筑安装工程承包条例还有效吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设