[发明专利]一种数据处理方法及装置有效
申请号: | 201410486131.5 | 申请日: | 2014-09-22 |
公开(公告)号: | CN104216768B | 公开(公告)日: | 2017-12-01 |
发明(设计)人: | 尤嘉 | 申请(专利权)人: | 北京金山安全软件有限公司 |
主分类号: | G06F9/46 | 分类号: | G06F9/46 |
代理公司: | 北京柏杉松知识产权代理事务所(普通合伙)11413 | 代理人: | 马敬,项京 |
地址: | 100085 北京*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 数据处理 方法 装置 | ||
技术领域
本发明涉及数据处理领域,特别涉及一种数据处理方法及装置。
背景技术
Node.js为一个事件驱动I/O服务端JavaScript环境,其基于Google的v8引擎,目的是为了提供可扩充网络程序,如web服务。
实际应用中,Node.js主要适用于数据密集型实时(data-intensive real-time)交互的应用场景,即基于Node.js搭建数据密集型实时应用程序。其中,所搭建的数据密集型实时应用程序的主进程内的主线程按照顺序处理所对应任务队列中的数据密集型任务,并且,在其中任何一个任务本身没有完成之前,其他任务无法被执行,其中,具体体现为:其它任务的回调、监听器、超时、nextTick()等的函数都得不到运行的机会。
其中,数据密集型实时应用程序并不是只有I/O密集型任务,还会存在CPU密集型任务,例如:对数据加/解密、数据压缩/解压或者根据用户的身份对图片做些个性化处理等。然而,对于同时存在I/O密集型任务和CPU密集型任务的数据密集型实时应用程序而言,当数据密集型实时应用程序的主进程内的主线程致力于做复杂耗时的CPU密集型任务时,由于主线程完成一个任务之前其他任务无法被执行,因此,任务队列中的I/O密集型任务就会被阻塞,此时,程序最好的情况是变慢,最糟糕的情况是停滞不动,像死掉一样,严重影响到用户的使用体验。
现有技术中,为了解决上述的任务阻塞问题,预先为主进程开辟一个子进程,在处理过程中,通过ipc通信方式将CPU密集型任务交给子进程,子进程执行完毕后,再通过ipc通信方式通知主进程,并将结果返回给主进程。具体的:Node.js中管理子进程的child_process模块通过fork()方法创建新的子进程实例方式来创建一个子进程,主进程可以通过.send(message)函数发送消息给子进程,用.on(′message′)监听子进程发送的消息,而子进程可以用process.on(′message′,callback)监听主进程发送的消息,并通过process.send(message)向主进程发送消息。
尽管现有的开辟新进程的方法在一定程度上解决了任务阻塞问题,但是,开辟新进程会带来如下问题:(1)系统资源占用率较大;(2)由于进程间通信效率不高导致任务处理效率较低。
发明内容
基于上述问题,本发明实施例公开了一种数据处理方法及装置,以在解决任务阻塞问题的同时,降低系统资源占用率和提高任务处理效率。技术方案如下:
第一方面,本发明实施例提供了一种数据处理方法,包括:
基于Node.js所搭建的数据密集型实时应用程序的主进程内的主线程接收目标CPU密集型任务,并将所述目标CPU密集型任务封装成目标数据处理任务,其中,所述目标数据处理任务包括执行所述目标CPU密集型任务所需的逻辑函数的名称以及所需传递的参数;
所述主线程将所述目标数据处理任务提交到任务请求队列中,其中,其中,该任务请求队列为该主进程内的预设的工作线程所对应的用于接收主线程提交的数据处理任务的队列;
所述工作线程在到达预设处理时机时,将所述任务请求队列中的所述目标数据处理任务转移至任务处理队列中,并运行预先建立的代码执行引擎,基于所述任务处理队列中的目标数据处理任务所包含的执行所述目标CPU密集型任务所需的逻辑函数的名称以及所需传递的参数,调用预设逻辑函数存储文件中的逻辑函数,以执行所述目标CPU密集型任务;
所述工作线程在所述目标CPU密集型任务被执行完毕后,通过线程间通信方式通知所述主线程;
所述主线程接收所述工作线程发出的关于任务执行完毕的通知,通过执行回调函数获得所述目标CPU密集型任务对应的结果。
可选的,所述工作线程处于运行状态;
所述预设处理时机为:所述工作线程按照预设任务处理规则检测所述任务请求队列的时刻。
可选的,所述工作线程处于睡眠状态;
所述主线程将所述目标数据处理任务提交到任务请求队列中后,还包括:
激活预设信号,其中,所述预设信号能够使得处于睡眠状态的工作线程获知;
所述预设处理时机为:所述工作线程获知所述主线程所激活的预设信号的时刻。
可选的,所述预设逻辑函数存储文件内的逻辑函数通过js脚本语言编写。
可选的,所述预设逻辑函数存储文件内的逻辑函数通过C++语言编写;
调用预设逻辑函数存储文件中的逻辑函数,包括:
加载所述预设逻辑函数存储文件;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京金山安全软件有限公司,未经北京金山安全软件有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201410486131.5/2.html,转载请声明来源钻瓜专利网。
- 上一篇:用于稿件编辑的灾备方法和装置
- 下一篇:一种多线程并发处理业务的方法和系统