位置: 编程技术 - 正文

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

  • 一般纳税人企业所得税是多少
  • 增值税不视同销售行为有哪些
  • 国税地税电子钥匙价格
  • 应付职工薪酬期末余额怎么算
  • 增值税抵扣凭证装订要求
  • 现金股利和股票股利的区别
  • 公司借款给个人超过一年未还
  • 企业如何进行利润分配的会记处理
  • 办事处可以办理临时身份证吗
  • 小微企业免征增值税申报表怎样填
  • 公司的钱怎么提现
  • 商品流通企业会计零售业务核算
  • 暂估成本一直拿不到发票
  • 持续经营净利润是什么意思
  • 合作社免税收入需要成本吗?
  • 应交税金月底可以有余额吗
  • 企业报税流程图
  • 如何结转销售收入
  • 王者荣耀干将莫邪技能
  • 收到厂家商品的会计分录
  • ping命令测试结果
  • pcas service进程可以关闭么
  • PHP:stream_set_blocking()的用法_Stream函数
  • 收到外单位委托办事的资金应该计入
  • laravel获取请求参数
  • php生成guid
  • 大前端需要掌握什么技能
  • elementui表格自定义排序
  • 微信多开使用方法
  • 公司主营业务和经营范围的区别
  • 企业之间收的借款利息该如何交税 原文
  • 建筑劳务税率是13还是6
  • 条码续展费用
  • wordpress全站伪静态
  • 进项税额转出的进项税额如何处理
  • 接待客户的住宿费计入什么科目
  • 普通发票能做进项吗
  • Access数据库文件以什么作为文件后缀名
  • 固定资产清理的借贷方向
  • 其他收益做账
  • 折旧啥意思
  • 金蝶低值易耗品报废操作
  • 什么是电子银行服务
  • 事业单位的结余与企业的利润相比
  • 一张凭证上可以写多个摘要吗
  • 股权转让的印花税税率是多少
  • 机器设备一般折旧几年
  • 医保卡收到钱
  • 文化事业建设费逾期未申报怎么办
  • 工会经费按实际发放交还是以计提的
  • 企业失信是什么意思
  • 利息税额计算公式
  • mysql5.7安装教程详细
  • u启动如何装系统
  • m1 macbook压缩能力
  • linux ldt
  • parallel capacitor
  • vim的配置文件名
  • win8.1的开始菜单在哪
  • shpc32.exe - shpc32是什么进程 有什么用
  • win8 boot manager
  • win10蓝屏故障
  • linux卸载repo
  • linux系统怎么隐藏文件
  • cocos2dx官方教程
  • javascript学习指南
  • js实现拖拽元素改编顺序
  • jquery插件使用教程
  • jqueryform表单提交
  • node·js
  • javascript有哪些
  • 解决问题
  • androids翻译
  • bash: /usr/bin/autocrorder: /usr/bin/python^M: bad interpreter: No such file or directory
  • eventbus threadmode
  • python字符串拼接join
  • 大学奖学金需要什么材料
  • 自然人电子税务局网页端
  • 7.1税务新政策
  • 如何代扣个人所得税
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设