位置: 编程技术 - 正文

充分发挥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编写实时聊天应用的范例

  • 车船使用税代扣怎么计算
  • 以前年度损益调整在利润表中怎么填
  • 财务专用章的重要性
  • 住宿开发票的税率是多少
  • 资产申报是什么
  • 向非关联企业捐赠现金会计分录
  • 清算固定资产处置方案
  • 公司贷款买车是公司还款吗
  • 开了专票不报销犯法吗
  • 企业购入物资合同模板
  • 小规模纳税人工资可以抵扣增值税吗
  • 异地作业人员的个税必须在收入地交吗?
  • 增值税税负率计算器
  • 增值税减免税款科目怎么结转
  • 借款利息不能抵扣进项税
  • 吊车费计什么科目
  • 个体工商户生产经营所得税税率表2021
  • 企业改制后职工有几项补偿
  • 外汇扣税是多少钱啊
  • 现金福利支出需要申报个税吗
  • 如何开启windows10云服务
  • 企业收到的政府补贴,怎么入账
  • 实收资本怎么用
  • 住宿费和差旅费
  • 装饰装修工程月薪多少
  • 传递优化的作用
  • 借款人约定分期还款中途可以起诉吗
  • 登记会计账簿的注意事项
  • 波特兰在哪
  • 增值税税率调整为13%的文件
  • 母公司收取子公司管理费的税率
  • framework core
  • 企业注销未抵扣完的进项税额怎么处理做账
  • 注册公司时的注册资金
  • 已用短信息服务发送信息,对方能收到吗
  • 前端使用vue
  • 固定资产处置的三种方式
  • 成本核算的会计处理
  • 根据银行回单做流水账单
  • 简易征收要交附合同吗
  • sqlloader-350错误
  • 暂估入库成本需要冲销吗
  • 印花税怎么计提记账
  • 退货开红字发票,已经交了消费税的怎么处理
  • mysql分页优化原理
  • 独资企业的税收政策
  • 银行承兑汇票收款人是谁
  • 财务费用汇兑损益
  • 固定资产折旧残值率的最新规定2021
  • 高新技术企业财务指标
  • 收付转三种凭证的限制类型
  • 电子发票开具流程?
  • 房地产企业收入确认条件税法
  • 卖出去的货没有发票怎么给人家解释
  • 数据库访问机制
  • sql to sqlalchemy 转换的小例子
  • win10简单版
  • windowsxp文件
  • centos5.8服务器
  • 电脑进程里的system
  • 电脑关机没反应怎么办出现一个对话框
  • windows10周年更新
  • windows7cmd命令不能执行
  • node 全局安装
  • kotlin开发安卓教程
  • 如何短时间内学会打字
  • 用户体验ui
  • python socket server
  • 置顶什么意思啊
  • unity星球模型
  • jquery怎么写
  • jQuery插件封装时如要实现链式编程,需要
  • 安卓系统手机图片文件夹在哪里
  • googlevoice使用教程
  • java多线程编程实战指南
  • 山东省省级政务服务区有哪些
  • 广东电子税务系统社保1号都能申报吗
  • 增值税发票打印时号码不一致怎么办
  • 汽车契税和购置税一样吗
  • 依法行政的观念
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设