位置: 编程技术 - 正文

充分发挥Node.js程序性能的一些方法介绍(充分发挥党员的先锋模范作用,积极)

编辑:rootadmin

推荐整理分享充分发挥Node.js程序性能的一些方法介绍(充分发挥党员的先锋模范作用,积极),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:充分发挥党员的先锋模范作用,积极,充分发挥各级党委什么协调各方的领导作用,充分发挥人民解放军在什么中的作用,充分发挥团的什么作用和什么作用,充分发挥人民解放军在什么中的作用,充分发挥各级党委什么协调各方的领导作用,充分发挥各级党委什么协调各方的领导作用,充分发挥团的什么作用和什么作用,内容如对您有帮助,希望把文章链接给更多的朋友!

一个Node.JS 的进程只会运行在单个的物理核心上,就是因为这一点,在开发可扩展的服务器的时候就需要格外的注意。

因为有一系列稳定的API,加上原生扩展的开发来管理进程,所以有很多不同的方法来设计一个可以并行的Node.JS运用。在这篇博文里,我们就来比较下这些可能的架构。

这篇文章同时也介绍compute-cluster 模块:一个小型的Node.JS库,可以用来很方便的管理进程,从来二线分布式计算。

遇到的问题

我们在Mozilla Persona的项目中需要可以处理大量不同特征的请求,所以我们尝试用使用Node.JS。

为了不影响用户体验,我们设计的‘Interactive' 请求只需要轻量级的计算消耗,但是提供更快地反映时间使得UI没有卡壳的感觉。相比之下,‘Batch'操作大概需要半秒的处理时间,而且有可能由于其他的原因,会有更长的延迟。

为了更好的设计,我们找了很多符合我们当前需求的方法去解决。考虑到扩展性和成本,我们列出以下关键需求:

效率:能有效的使用所有空闲的处理器 响应:我们的“应用”能实时快速的响应 优雅:当请求量过多到不能处理的时候,我们处理我们能处理的。不能处理的要清晰的把错误反馈 简单:我们的解决方案使用起来必须简单方便

通过以上几点我们可以清楚、有目标的去筛选

方案一:直接在主线程中处理.

当主线程直接处理数据的时候,结果很不好:

你不能充分利用多核CPU的优势,在交互式的请求/响应中,必须等待当前请求(或响应)处理完毕,毫无优雅可言。

这个方案唯一的优点是:够简单

在 Node.JS 程序中,希望同时处理多个请求,又想同步进行处理,那你准备弄个焦头烂额吧。

方法 2: 是否使用异步处理.

如果在后台使用异步的方法来执行是否一定会有很大的性能改善呢&#;

答案是不一定.它取决于后台运行是否有意义

例如下面这种情况:如果在主线程上使用javascript或者本地代码进行计算时,性能并不比同步处理更好时,就不一定需要在后台用异步方法去处理

请阅读以下代码

}关键点就在于NodeJS异步API的使用并不依赖于多进程的应用

方案三:用线程库来实现异步处理。

只要实现得当,使用本地代码实现的库,在 NodeJS 调用的时候是可以突破限制从而实现多线程功能的。

有很多这样的例子, Nick Campbell 编写的 bcrypt library 就是其中优秀的一个。

如果你在4核机器上拿这个库来作一个测试,你将看到神奇的一幕:4倍于平时的吞吐量,并且耗尽了几乎所有的资源!但是如果你在核机器上测试,结果将不会有太大变化:有4个核心的使用率基本达到%,但其他的核心基本上都处于空闲状态。

问题出在这个库使用了NodeJS内部的线程池,而这个线程池并不适合用来进行此类的计算。另外,这个线程池上限写死了,最多只能运行4个线程。

除了写死了上限,这个问题更深层的原因是:

使用NodeJS内部线程池进行大量运算的话,会妨碍其文件或网络操作,使程序看起来响应缓慢。 很难找到合适的方法来处理等待队列:试想一下,如果你队列里面已经积压了5分钟计算量的线程,你还希望继续往里面添加线程吗&#;充分发挥Node.js程序性能的一些方法介绍(充分发挥党员的先锋模范作用,积极)

内建线程机制的组件库在这种情况下并不能有效地利用多核的优势,这降低了程序的响应能力,并且随着负载的加大,程序表现越来越差。

方案四:使用 NodeJS 的 cluster 模块

NodeJS 0.6.x 以上的版本提供了一个cluster模块 ,允许创建“共享同一个socket”的一组进程,用来分担负载压力。

假如你采用了上面的方案,又同时使用 cluster 模块,情况会怎样呢?

这样得出的方案将同样具有同步处理或者内建线程池一样的缺点:响应缓慢,毫无优雅可言。

有时候,仅仅添加新运行实例并不能解决问题。

方案五:引入 compute-cluster 模块

在 Persona 中,我们的解决方案是,维护一组功能单一(但各不相同)的计算进程。

在这个过程中,我们编写了 compute-cluster 库。

这个库会自动按需启动和管理子进程,这样你就可以通过代码的方式来使用一个本地子进程的集群来处理数据。

使用例子:

fileworker.js 中响应了 message 事件,对传入的请求进行处理:

无需更改调用代码,compute-cluster 模块就可以和现有的异步API整合起来,这样就能以最小的代码量换来真正的多核并行处理。

我们从四个方面来看看这个方案的表现。

多核并行能力:子进程使用了全部的核心。

响应能力:由于核心管理进程只负责启动子进程和传递消息,大部分时间里它都是空闲的,可以处理更多的交互请求。

即使机器的负载压力很大,我们仍然可以利用操作系统的调度器来提高核心管理进程的优先级。

简单性:使用了异步API来隐藏了具体实现的细节,我们可以轻易地将该模块整合到现在项目中,甚至连调用代码无需作改变。

现在我们来看看,能不能找一个方法,即使负载突然激增,系统的效率也不会异常下降。

当然,最佳目标仍然是,即使压力激增,系统依然能高效运行,并处理尽量多的请求。

为了帮助实现优秀的方案,compute-cluster 不仅仅只是管理子进程和传递消息,它还管理了其他信息。

它记录了当前运行的子进程数,以及每个子进程完成的平均时间。

有了这些记录,我们可以在子进程开启之前预测它大概需要多少时间。

据此,再加上用户设置的参数(max_request_time),我们可以不经过处理,直接就关闭那些可能超时的请求。

这个特性让你可以很容易根据用户体验来确定你的代码。比如说,“用户登录的时候不应该等待超过秒。”这大概等价于将 max_request_time 设置为7秒(需要考虑网络传输时间)。

我们在对 Persona 服务进行压力测试后,得到的结果很让人满意。

在压力极高的情况下,我们依然能为已认证的用户提供服务,还阻止了一部分未认证的用户,并显示了相关的错误信息。

使用Meteor配合Node.js编写实时聊天应用的范例 我经常见到被拿来与Derby.js做比较的框架是Meteor.js.与Derby相似的是,它也能在多个客户端下实时更新views,尽管做法上可能跟Derby有点不同.Derby可以较容易的

Node.js编程中客户端Session的使用详解 静态网站很容易扩展。你只需要全部缓存,不需要考虑从不同服务器组合有状态的内容给用户。可惜,大多数Web应用使用有状态的内容提供个性化体验

浅析Node.js中的内存泄漏问题 这篇文章是由Mozilla的Identity团队带来的ANode.JSHolidaySeason系列文章的首篇,该团队上个月发布了Persona的第一个测试版本。在开发Persona时我们构建了一系列

标签: 充分发挥党员的先锋模范作用,积极

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

上一篇:Windows系统下Node.js的简单入门教程(windows node.js)

下一篇:使用Meteor配合Node.js编写实时聊天应用的范例

  • 已注册登记的机动车有什么情形的
  • 契税计税依据及税率
  • 营业执照注销对商标有影响吗
  • 装载机折旧年限是几年
  • 公司奖金没有按时发可以要吗
  • 购买增值税专用发票罪
  • 酒店应不应该为员工提供澡堂
  • 下列应税项目中,不按次计算征收个人所得税的是
  • 退税降低
  • 收到保险赔款是什么意思
  • 其他应收款直接计入营业外收入
  • 经营期间银行存在的问题
  • 应收账款的借方表示增加还是减少
  • 被投资方亏损怎么处理
  • 补缴去年地税社保的会计分录怎么写?
  • 未开票收入怎么做账
  • 未达起征点销售额,11栏怎么填写
  • 进项抵扣抵扣
  • 个人购买房屋的税
  • 固定资产的摊销额计入什么科目
  • 公司制作小程序定金能放在图物资吗
  • 公司帮个人代缴社保会计分录
  • 房屋贷款基准利率表 历年查询
  • 商业现金折扣计算
  • 2018年年终奖个税计算方法
  • 税控盘费用抵减增值税的账务处理
  • 房地产开发企业所得税管理办法
  • 支付装修押金会退吗
  • 为什么我的win10
  • Win10 Build 19043(21H1最新版)即将推送 更新内容汇总
  • 企业发生的亏损不一定会导致所有者权益减少
  • 员工出差时法律规定
  • wordpress相关文章
  • 商品流通企业会计分录
  • layui 日期控件赋值
  • php自定义header
  • 厂区绿化工程计入什么科目
  • php 通信
  • vue setstate
  • vue3.0用法
  • 收到房租怎么做账务处理
  • python输入三个数输出最小的
  • 外管证注销后发票还可以重开吗?
  • 2022年最新办公用房标准
  • 现金支出的账务处理
  • 六税一费和六税两费的区别
  • 股权激励如何做会计分录
  • 小型公司怎么做账
  • 进口退货退税
  • 销售货物增值税税率变化
  • 资金帐薄印花税是指什么
  • 个税起征点提高的意义
  • 费用报销如何做账务处理分录
  • 招待费住宿
  • 企业发生亏损时,下列各项,( )是弥补亏损的渠道
  • 工伤 保险赔付
  • sql server查询数据库大小
  • win10简单版
  • ubuntu系统升级后无法进入系统
  • win8.1怎么升级到win11
  • win8怎么禁止开机启动项
  • windows 10预览版
  • xp 修复
  • win10怎么关闭securboot
  • linux如何学
  • 不知道,不知道
  • 如何在Windows下移动文件
  • msxct.exe - msxct是什么进程 有什么用
  • win 10系统怎么提高网速
  • ssh远程登录设置
  • linux安装atop
  • 怎么做小地图图片呢
  • jquery中checkbox使用方法简单实例演示
  • android录音软件
  • javascript语法总结
  • ca钥匙登陆不了电子税务局
  • 个人所得税子女教育和赡养老人抵扣多少税
  • 加计扣除为什么是税收优惠
  • 税控盘版开票软件打不开是什么原因
  • 国家税务总局云平台网址
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设