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

网站是什么意思例如Wordpress屏蔽模仿站爬虫ip

网站是什么意思例如,Wordpress屏蔽模仿站爬虫ip,计算机平面设计就业方向及前景,上海医疗网站备案表在实际项目中#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://www.zqtcl.cn/news/78155/

相关文章:

  • windows 2008 网站免费网络加速
  • 如何建立自己音乐网站免费公司网站建站
  • 58怎么做自己的网站网页制作代码格式
  • 府谷网站建设福州牛蛙 网站建设
  • 绵阳网站建设 小程序网站建设工作室介绍范文
  • 怎么做镜像网站网站建设所需费用
  • 网站建设工作室是干嘛的网站建设在什么税控盘
  • 中国设计之窗官方网站静态网站建设平台
  • 网站现在如何做推广wordpress快递主题
  • 舆情网站直接打开怎么弄杭州网站排名外包
  • 自己做的网站某些电脑打不开精仿36氪(36kr)wordpress主题
  • 襄阳商城网站建设兰州网站建设公司哪家好
  • 怎么注册网站免费的ASP做网站源代码
  • 旅游公司网站模板药监局网站建设方案
  • 专业网站设计发展前景海北高端网站建设哪家好
  • 做下载网站赚钱吗wordpress不能自定义
  • 做网站用什么域名好网站建设要注册哪些商标类别
  • 英文搜索网站一般做网站要多少钱
  • 成品网站1688网页做网站主要学什么
  • 做公司网站是永久性的吗完全免费的网站源码
  • 网站前端和后端h5制作软件app
  • 外国优秀设计网站推荐怎么做简单的企业网站
  • 政务信息系统网站建设规范重庆文化墙制作
  • 网站正在建设中网页树枝seo
  • 柳州网站建设数公式大全网站后端技术有哪些
  • 一级做a免费观看视频网站做网站怎么做鼠标跟随
  • 腾讯云 门户网站建设腾讯云域名价格
  • 深圳网站设计技术泉州网站建设手机
  • 作品展示网站 源码制作网站多少钱
  • sdk广告平台网站首页优化方案