一种数据处理方法及装置制造方法及图纸

技术编号:12929239 阅读:44 留言:0更新日期:2016-02-29 00:20
本发明专利技术实施例公开了一种数据处理方法及装置。该方法包括:主进程内的主线程接收目标CPU密集型任务,将目标CPU密集型任务所封装成的目标数据处理任务提交到任务请求队列中;工作线程在到达预设处理时机时,将任务请求队列中的目标数据处理任务转移至任务处理队列中,运行预先建立的代码执行引擎,基于任务处理队列中的目标数据处理任务,调用预设逻辑函数存储文件中的逻辑函数,在目标CPU密集型任务被执行完毕后通知主线程;主线程接收工作线程发出的关于任务执行完毕的通知,获得目标CPU密集型任务对应的结果。本方案在解决任务阻塞问题的同时,降低系统资源占用率和提高任务处理效率。

【技术实现步骤摘要】
【专利摘要】本专利技术实施例公开了一种数据处理方法及装置。该方法包括:主进程内的主线程接收目标CPU密集型任务,将目标CPU密集型任务所封装成的目标数据处理任务提交到任务请求队列中;工作线程在到达预设处理时机时,将任务请求队列中的目标数据处理任务转移至任务处理队列中,运行预先建立的代码执行引擎,基于任务处理队列中的目标数据处理任务,调用预设逻辑函数存储文件中的逻辑函数,在目标CPU密集型任务被执行完毕后通知主线程;主线程接收工作线程发出的关于任务执行完毕的通知,获得目标CPU密集型任务对应的结果。本方案在解决任务阻塞问题的同时,降低系统资源占用率和提高任务处理效率。【专利说明】一种数据处理方法及装置
本专利技术涉及数据处理领域,特别涉及一种数据处理方法及装置。
技术介绍
Node, js为一个事件驱动I/O服务端JavaScript环境,其基于Google的v8引擎, 目的是为了提供可扩充网络程序,如web服务。 实际应用中,Node, js主要适用于数据密集型实时(data-intensive real-time) 交互的应用场景,即基于Node, js搭建数据密集型实时应用程序。其中,所搭建的数据密集 型实时应用程序的主进程内的主线程按照顺序处理所对应任务队列中的数据密集型任务, 并且,在其中任何一个任务本身没有完成之前,其他任务无法被执行,其中,具体体现为:其 它任务的回调、监听器、超时、nextTickO等的函数都得不到运行的机会。 其中,数据密集型实时应用程序并不是只有1/0密集型任务,还会存在CPU密集型 任务,例如:对数据加/解密、数据压缩/解压或者根据用户的身份对图片做些个性化处理 等。然而,对于同时存在1/0密集型任务和CPU密集型任务的数据密集型实时应用程序而 言,当数据密集型实时应用程序的主进程内的主线程致力于做复杂耗时的CPU密集型任务 时,由于主线程完成一个任务之前其他任务无法被执行,因此,任务队列中的1/0密集型任 务就会被阻塞,此时,程序最好的情况是变慢,最糟糕的情况是停滞不动,像死掉一样,严重 影响到用户的使用体验。 现有技术中,为了解决上述的任务阻塞问题,预先为主进程开辟一个子进程,在处 理过程中,通过ipc通信方式将CPU密集型任务交给子进程,子进程执行完毕后,再通过ipc 通信方式通知主进程,并将结果返回给主进程。具体的:Node, js中管理子进程的child_ process模块通过fork ()方法创建新的子进程实例方式来创建一个子进程,主进程可以通 过.send(message)函数发送消息给子进程,用.οηΓ message')监听子进程发送的消 息,而子进程可以用process. onC message',callback)监听主进程发送的消息,并通过 process, send (message)向主进程发送消息。 尽管现有的开辟新进程的方法在一定程度上解决了任务阻塞问题,但是,开辟新 进程会带来如下问题:(1)系统资源占用率较大;(2)由于进程间通信效率不高导致任务处 理效率较低。
技术实现思路
基于上述问题,本专利技术实施例公开了一种数据处理方法及装置,以在解决任务阻 塞问题的同时,降低系统资源占用率和提高任务处理效率。技术方案如下: 第一方面,本专利技术实施例提供了一种数据处理方法,包括: 基于Node, js所搭建的数据密集型实时应用程序的主进程内的主线程接收目标 (PU密集型任务,并将所述目标CPU密集型任务封装成目标数据处理任务,其中,所述目标 数据处理任务包括执行所述目标CPU密集型任务所需的逻辑函数的名称以及所需传递的 参数; 所述主线程将所述目标数据处理任务提交到任务请求队列中,其中,其中,该任务 请求队列为该主进程内的预设的工作线程所对应的用于接收主线程提交的数据处理任务 的队列; 所述工作线程在到达预设处理时机时,将所述任务请求队列中的所述目标数据处 理任务转移至任务处理队列中,并运行预先建立的代码执行引擎,基于所述任务处理队列 中的目标数据处理任务所包含的执行所述目标CPU密集型任务所需的逻辑函数的名称以 及所需传递的参数,调用预设逻辑函数存储文件中的逻辑函数,以执行所述目标CPU密集 型任务; 所述工作线程在所述目标CPU密集型任务被执行完毕后,通过线程间通信方式通 知所述主线程; 所述主线程接收所述工作线程发出的关于任务执行完毕的通知,通过执行回调函 数获得所述目标CPU密集型任务对应的结果。 可选的,所述工作线程处于运行状态; 所述预设处理时机为:所述工作线程按照预设任务处理规则检测所述任务请求队 列的时刻。 可选的,所述工作线程处于睡眠状态; 所述主线程将所述目标数据处理任务提交到任务请求队列中后,还包括: 激活预设信号,其中,所述预设信号能够使得处于睡眠状态的工作线程获知; 所述预设处理时机为:所述工作线程获知所述主线程所激活的预设信号的时刻。 可选的,所述预设逻辑函数存储文件内的逻辑函数通过js脚本语言编写。 可选的,所述预设逻辑函数存储文件内的逻辑函数通过C++语言编写; 调用预设逻辑函数存储文件中的逻辑函数,包括: 加载所述预设逻辑函数存储文件; 调用所加载的预设逻辑函数存储文件中的逻辑函数。 可选的,所述代码执行引擎为v8 VM。 第二方面,本专利技术实施例还提供了一种数据处理装置,包括: 用于执行基于Node, js所搭建的数据密集型实时应用程序的主进程内的主线程 的功能的主线程模块、用于执行基于Node, js所搭建的数据密集型实时应用程序的主进程 内的工作线程的功能的工作线程模块; 所述主线程模块包括任务接收子模块、任务封装子模块、任务提交子模块、通知接 收子模块和结果处理子模块,所述工作线程模块包括任务转移子模块、任务处理子模块和 通知发送子模块; 其中,所述任务接收子模块,用于接收目标CPU密集型任务; 所述任务封装子模块,用于将所述目标CPU密集型任务封装成目标数据处理任 务,其中,所述目标数据处理任务包括执行所述目标CPU密集型任务所需的逻辑函数的名 称以及所需传递的参数; 所述任务提交子模块,用于将所述目标数据处理任务提交到任务请求队列中,其 中,所述任务请求队列为所述主进程内的预设的工作线程所对应的用于接收主线程提交的 数据处理任务的队列; 所述任务转移子模块,用于在到达预设处理时机时,将所述任务请求队列中的所 述目标数据处理任务转移至任务处理队列中; 所述任务处理子模块,用于运行预先建立的代码执行引擎,基于所述任务处理队 列中的目标数据处理任务所包含的执行所述目标CPU密集型任务所需的逻辑函数的名称 以及所需传递的参数,调用预设逻辑函数存储文件中的逻辑函数,以执行所述目标CPU密 集型任务; 所述通知发送子模块,用于在所述目标CPU密集型任务被执行完毕后,通过线程 间通信方式通知所述主线程; 所述通知接收子模块,用于接收所述工作线程发出的关于任务执行完毕的通知; 所述结果处理子模块,用于通过执行回调函数获得所述目标CPU密集型任本文档来自技高网
...
一种数据处理方法及装置

【技术保护点】
一种数据处理方法,其特征在于,包括:基于Node.js所搭建的数据密集型实时应用程序的主进程内的主线程接收目标CPU密集型任务,并将所述目标CPU密集型任务封装成目标数据处理任务,其中,所述目标数据处理任务包括执行所述目标CPU密集型任务所需的逻辑函数的名称以及所需传递的参数;所述主线程将所述目标数据处理任务提交到任务请求队列中,其中,该任务请求队列为该主进程内的预设的工作线程所对应的用于接收主线程提交的数据处理任务的队列;所述工作线程在到达预设处理时机时,将所述任务请求队列中的所述目标数据处理任务转移至任务处理队列中,并运行预先建立的代码执行引擎,基于所述任务处理队列中的目标数据处理任务所包含的执行所述目标CPU密集型任务所需的逻辑函数的名称以及所需传递的参数,调用预设逻辑函数存储文件中的逻辑函数,以执行所述目标CPU密集型任务;所述工作线程在所述目标CPU密集型任务被执行完毕后,通过线程间通信方式通知所述主线程;所述主线程接收所述工作线程发出的关于任务执行完毕的通知,通过执行回调函数获得所述目标CPU密集型任务对应的结果。

【技术特征摘要】

【专利技术属性】
技术研发人员:尤嘉
申请(专利权)人:北京金山安全软件有限公司
类型:发明
国别省市:北京;11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1