当前位置: 首页 > news >正文

网站建设衡水wordpress完美优化

网站建设衡水,wordpress完美优化,公众号开发退款步骤,网站建设一般多少钱一年在实际项目中#xff0c;如果遇到需要大计算量的操作#xff0c;按需fork#xff08;分叉#xff09;其实不是一个好的选择。因为fork的子进程也是V8#xff08;NodeJS的核心引擎#xff09;的新实例#xff0c;每创建一个新实例#xff0c;需要约30毫秒启动时间#…在实际项目中如果遇到需要大计算量的操作按需fork分叉其实不是一个好的选择。因为fork的子进程也是V8NodeJS的核心引擎的新实例每创建一个新实例需要约30毫秒启动时间和至少10MB的初始内存。也就是说创建进程是有代价的你不能创建太多也不能频繁创建。那样达不到提高进程效率的目的。那么该如何高效优雅的使用子进程呢工作池工作池合理的办法是创建一个可用的工作池在池中存放足够多的进程并可以随时分配使用。我们对上一节讲的内容进行升级当父进程发送一个任务给子进程时子进程执行任务。并将结果向主进程反馈。在父进程中需要的代码会是这样的function doWork(job,cb){var child cp.fork(./worker);//发送工作给子进程child.send(job);//希望子进程返回一个确切的消息child.once(message,function(result){cb(null,result);}) }嗯...这样讲有些凌乱这一章比较复杂最好的办法还是写一个完整的代码做为例子1、father.js主进程var http require(http); var makePool require(./pooler); var runJob makePool(./worker);http.createServer(function(req,res){runJob(some dummy job,function(er,data){console.log(father callback get:,data);if(er){return res.end(get an error:er.message)}res.end(work pool);})}).listen(8000)当有客端访问时触发runjob开始启行工作。2、worker.jsprocess.on(message,function(job){console.log(worker get msg:,job);for(var i0;i10;i){console.log(worker send:,job,i);process.send(finish job:jobi);}})收到father主进程发来的消息时使用process.send()方法调用子进程向工作池发出工作任务。3、pool.js工作池接收worker消息用工作池完成操作并反馈给主程序。代码中做了详细的注释 就不单独对代码做解析了 var cp require(child_process); //获取CPU数量有几个CPU就创建几个子进程这样就可以最大化的利用机器性能 var cpus require(os).cpus().length;//模块导出函数 module.exports function(workModule){//等待任务队列当工作任务被下发但没有闲工作进程时放到此队列var awaiting [];//存放准备就绪的工作进程var readyPool [];//当前的工作子进程数量工作池的大小var poolSize 0;return function doWork(job,cb){//如果工作池数量已经最大并且没有准备就绪的工作子进程也就是所有工作子进程都在工作中那么排队等待if(!readyPool.length poolSize cpus){//压入到等待队列等待后续处理return awaiting.push([dowork,job.cb]);}//取得一个可用的工作子进程或fork分叉一个新的子进程增加工作池的大小var child readyPool.length ? readyPool.shift() : (poolSize, cp.fork(workModule));{//子进程是否完成回调的标记var cbTriggered false;//初始阶段移除子进程上的监听确保每个子进程只拥有一次监听child.removeAllListeners();//错误child.once(error,function(err){//未回调if(!cbTriggered){//回调返回为错误cb(err);//回调标识改为true已回调cbTriggered true;} //结束子进程child.kill();//这里不用操作工作池poolSize--因为kill会触发exit事件在exit事件中操作工作池});//子进程退出了不明原因的意外退出、被kill()等都触发child.once(exit,function(code,signal){//未回调if(!cbTriggered){//回调返回信息cb(new Error(Child exited with code:code))}//工作池正在工作的子进程数大小减一poolSize --;//退出的子进程是否在准备好的子进程数组中var childIdx readyPool.indexOf(child);if(childIdx -1){//从准备好的子进程数组中移除readyPool.splice(childIdx,1);}})//获取父进程发来的消息child.on(message,function(msg){console.log(pool get msg:,msg);cb(null,msg);cbTriggered true;readyPool.push(child);//如何等待区有内容处理之if(awaiting.length){setImmediate.apply(null,awaiting.shift());}//向父进程发送消息}).send(job);}//child区域结束} }执行效果图中展示的是工作流程可见此种方法可以达到我们的预期工作池很OK。对于实际编程中遇到的消耗比较大的情况使用此种方法可以极大的提高效率且本文已经将工作池写成了模块(pooler.js建议收藏nodejs开发在某个时候一定会遇到适合的场景的。
http://wiki.neutronadmin.com/news/338326/

相关文章:

  • 章丘市网站建设seo网站的总体风格包括
  • 鞍山网站设计品牌营销推广策划
  • 室内设计网站平台网站建设属于广告费么
  • 购物网站开发实战专门做珠宝的网站
  • wordpress建企业网站便宜网站建设模板网站
  • 在别人网站挂黑链免费算命
  • 网页显示网站正在建设中怎么做朝天门户网
  • 揭阳做网站设计wordpress书籍主题
  • 网站的行为怎么做免费logo设计模板
  • 东营网站建设方案范文杭州公司注册地址租赁一般多少钱
  • 赣榆建设局网站遂宁门户网站建设先进工作单位
  • 深圳龙华做网站公司网站建设工作小组推进表
  • Linux网站建设总结首钢建设二建设公司网站
  • 重庆施工员证书查询官方网站删除百度收录网站
  • 广州网站建设哪家有黄石网站建
  • 北京 网站建设咨询顾问公司2345网址导航电脑版大全
  • 一个网站的设计周期百度搜索量
  • 如何做优秀的视频网站设计衡水企业网站建设
  • 烟台h5响应式网站建设个人网站备案备注怎么写
  • 农业推广网站建设联通企业网站建设
  • 如何招网站开发人员岳阳建设公司网站
  • 南漳做网站网站检索功能怎么做呢
  • 动漫制作专业升本江门网站seo优化
  • 怎么切页面做网站外贸网站做推广
  • 安徽省建设厅网站权重的网站
  • 建设企业网站专业服务开发网站要注意什么
  • 手机壳定制网站制作网站建设思路梳理
  • 如何让网站长尾关键词有排名17一起做网店网站
  • 定制衣服的软件app优化wordpress
  • 中国最权威的网站排名sem和seo是什么职位