位置: 编程技术 - 正文

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

  • 税控财务软件装什么系统
  • 经营租赁的税务编码是什么
  • 上下班出了事故算不算工伤
  • 企业所得税季末数怎么填
  • 作废的发票要拿出来吗
  • 自己打印raz
  • 一个小广告公司一年可以赚多少钱
  • 社保稽查公司提供不了会计分录怎么办
  • 企业关联方利息支出税前扣除的标准扣除
  • 房地产企业汇缴清算条件
  • 未使用房子需要交物业费嘛
  • 享受所得税减免优惠的生产性外商投资企业包括
  • 上市公司发行股票可以自行销售吗
  • 企业如何规避印刷风险
  • 外币报表折算差额为负数代表
  • 增值税税差调整原因
  • 自建房房产税计税依据及计算方式
  • 固定资产报废的净损失计入哪里
  • 斐讯路由器地址在哪里看
  • deepin 20 wifi
  • 筹建期间费用计入什么
  • 做事应该怎么做
  • php判断ip是否属于某个区段
  • pcfile.dll是什么意思
  • 不动产固定资产的进项税抵扣新规定
  • 残疾基金出什么科目
  • 城市维护税暂行条例
  • 进项税额转出会影响当期纳税吗?
  • 奖金没有做到工资里怎么入账
  • 航天信息服务费的会计分录
  • 增值税附加申报表怎样填小规模
  • sql2008服务器
  • 品种法的特点有( )
  • 利润表中其他业务利润怎么算
  • 软件研发费用怎么做账
  • 出口退税三类企业影响
  • 保险再保业务
  • 年报资本负债表怎么看
  • 工程设备公司经营范围
  • 退货对方不开具红字发票怎么办
  • 临时工工资如何做账
  • 营业外收支主要有哪些
  • 注销基本户必须注销专户吗
  • 登记三栏式现金日记账和银行存款日记账的依据
  • mysql@变量
  • 图形工具的作用
  • rpm包安装的apache可以如何启动
  • Win7 64位系统声卡重装过程中出现失败的解决方法
  • xp系统的本地连接
  • 苹果电脑截图快捷键
  • Windows XP英文版序列号
  • linux编译安装怎么卸载
  • win10不能注销登录
  • 怎么取消win8.1开机密码
  • service.exe是什么
  • win8操作系统安装
  • sf2是什么文件
  • 红石怎么启动
  • win7电脑曝光度过高怎么调
  • mac2019强制关机
  • python urllib urlopen
  • 获取本机ip地址命令
  • linux的关闭命令
  • 命令行输入以下哪个命令可以画出样条曲线
  • chrome version
  • js中的require用法
  • 如何分析源码
  • android使用方法
  • unity控制三维模型
  • js下拉菜单的制作方法
  • Windows下Eclipse+PyDev配置Python+PyQt4开发环境
  • python中用户登录
  • 社保ukey怎么使用
  • 陕西电子税务局官网
  • 个人绩效考核税务局
  • 车辆购置税完税证明怎么查询
  • 未到申报期可以提前抄税吗
  • 税务延期申报最长多久
  • 营销代码是多少
  • 福建省泉州市石狮市新服装城
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设