位置: 编程技术 - 正文

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

  • 受票方与付款方不一致
  • 购买材料,收回会计分录
  • 计提坏账准备的做法体现了
  • 公司财务外包费怎么入账
  • 银企对账如何操作
  • 商业零售企业实行增值税后购进商品业务的账务处理
  • 专票丢失登报后怎么处理
  • 房产证印花税如何计算
  • 发现以前年度少计提税金
  • 不达起征点收到销售额如何作分录?
  • 向消费者支付佣金怎么算
  • 地税局返的个人所得税手续费多久返还?
  • 雇主责任险是否属于财产保险
  • 物业管理企业主营业务收入
  • 一般纳税人企业所得税政策最新2023税率
  • 一般纳税人能用小企业会计准则吗
  • 收到个人实收资本怎么做账
  • 一级建造师继续教育
  • 中小五金企业如何进行成本核算
  • 公司出差打的报销吗
  • 固定资产折旧会计做账
  • 企业风险报酬转移怎么理解
  • 是否所有监控设备都录像
  • 进货折让会计分录
  • 属于项目的一个实例
  • 农业合作社零申报流程
  • 如何禁止远程
  • c盘显示隐藏
  • 收到人才引进补助会计分录
  • php使用方法
  • 罚款计入营业外支出影响当期损益
  • PHP:imagedestroy()的用法_GD库图像处理函数
  • php实现的加密解决方案
  • 分配利润的会计处理
  • 工资月末结转
  • 长期应收款如何核算
  • 事业单位电费应该谁交
  • 分公司要所得税汇算吗
  • node.js入门教程
  • 织梦系统
  • 个体工商户税收起征点是多少?
  • 营业执照是如何年审的
  • 金蝶专业版仓库管理怎么结账
  • 购销合同谁来做
  • sqlserver2008数据库定时备份
  • 福利费可以抵扣所得税吗
  • 企业所得税汇算清缴时间
  • 减值准备减少记哪方
  • 商品亏本出售分录
  • 借别人账户过钱
  • 残保金是应交税费吗
  • 什么是委托检验报告
  • 固定资产清理在贷方怎么结转
  • 外购设备的会计分录
  • 企业利润总额计算例题及答案
  • 周转材料包装物的账务处理
  • 包工包料如何核算成本
  • 机票的抵扣进项税的注意事项
  • 对方开普票,怎么扣税
  • 资本金与注册资本的关系
  • windows自带软件有哪些
  • Win10系统如何取消密码
  • ubuntu如何截图快捷键
  • ubuntu搜索已安装软件
  • mac trim功能
  • win8蓝屏解决方法
  • windows server 2012 nfs共享
  • 电脑联想windows7
  • win7 ie
  • 微软win8.1
  • 笔记本怎么设置定时关机
  • 关于shell的说法,不正确的是
  • vue配置api
  • jquery删除一个标签
  • 怎样编?
  • JavaScript中iframe实现局部刷新的几种方法汇总
  • 新浪微博手机客户端下载
  • 简单介绍中秋节
  • jquery更换图片
  • 残疾人就业年审经办人
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设