CN104216768A - 一种数据处理方法及装置 - Google Patents
一种数据处理方法及装置 Download PDFInfo
- Publication number
- CN104216768A CN104216768A CN201410486131.5A CN201410486131A CN104216768A CN 104216768 A CN104216768 A CN 104216768A CN 201410486131 A CN201410486131 A CN 201410486131A CN 104216768 A CN104216768 A CN 104216768A
- Authority
- CN
- China
- Prior art keywords
- task
- data processing
- thread
- submodule
- cpu intensive
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明实施例公开了一种数据处理方法及装置。该方法包括:主进程内的主线程接收目标CPU密集型任务,将目标CPU密集型任务所封装成的目标数据处理任务提交到任务请求队列中;工作线程在到达预设处理时机时,将任务请求队列中的目标数据处理任务转移至任务处理队列中,运行预先建立的代码执行引擎,基于任务处理队列中的目标数据处理任务,调用预设逻辑函数存储文件中的逻辑函数,在目标CPU密集型任务被执行完毕后通知主线程;主线程接收工作线程发出的关于任务执行完毕的通知,获得目标CPU密集型任务对应的结果。本方案在解决任务阻塞问题的同时,降低系统资源占用率和提高任务处理效率。
Description
技术领域
本发明涉及数据处理领域,特别涉及一种数据处理方法及装置。
背景技术
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++语言编写;
调用预设逻辑函数存储文件中的逻辑函数,包括:
加载所述预设逻辑函数存储文件;
调用所加载的预设逻辑函数存储文件中的逻辑函数。
可选的,所述代码执行引擎为v8 VM。
第二方面,本发明实施例还提供了一种数据处理装置,包括:
用于执行基于Node.js所搭建的数据密集型实时应用程序的主进程内的主线程的功能的主线程模块、用于执行基于Node.js所搭建的数据密集型实时应用程序的主进程内的工作线程的功能的工作线程模块;
所述主线程模块包括任务接收子模块、任务封装子模块、任务提交子模块、通知接收子模块和结果处理子模块,所述工作线程模块包括任务转移子模块、任务处理子模块和通知发送子模块;
其中,所述任务接收子模块,用于接收目标CPU密集型任务;
所述任务封装子模块,用于将所述目标CPU密集型任务封装成目标数据处理任务,其中,所述目标数据处理任务包括执行所述目标CPU密集型任务所需的逻辑函数的名称以及所需传递的参数;
所述任务提交子模块,用于将所述目标数据处理任务提交到任务请求队列中,其中,所述任务请求队列为所述主进程内的预设的工作线程所对应的用于接收主线程提交的数据处理任务的队列;
所述任务转移子模块,用于在到达预设处理时机时,将所述任务请求队列中的所述目标数据处理任务转移至任务处理队列中;
所述任务处理子模块,用于运行预先建立的代码执行引擎,基于所述任务处理队列中的目标数据处理任务所包含的执行所述目标CPU密集型任务所需的逻辑函数的名称以及所需传递的参数,调用预设逻辑函数存储文件中的逻辑函数,以执行所述目标CPU密集型任务;
所述通知发送子模块,用于在所述目标CPU密集型任务被执行完毕后,通过线程间通信方式通知所述主线程;
所述通知接收子模块,用于接收所述工作线程发出的关于任务执行完毕的通知;
所述结果处理子模块,用于通过执行回调函数获得所述目标CPU密集型任务对应的结果。
可选的,所述工作线程处于运行状态;
所述预设处理时机为:所述工作线程按照预设任务处理规则检测所述任务请求队列的时刻。
可选的,所述工作线程处于睡眠状态;
所述主线程模块,还包括:信号激活子模块,用于将所述目标数据处理任务提交到任务请求队列中后,激活预设信号,其中,所述预设信号能够使得处于睡眠状态的工作线程获知;
所述预设处理时机为:所述工作线程获知所述主线程所激活的预设信号的时刻。
可选的,所述预设逻辑函数存储文件内的逻辑函数通过js脚本语言编写。
可选的,所述预设逻辑函数存储文件内的逻辑函数通过C++语言编写;
所述任务处理子模块,具体用于运行预先建立的代码执行引擎,基于所述任务处理队列中的目标数据处理任务所包含的执行所述目标CPU密集型任务所需的逻辑函数的名称以及所需传递的参数,加载所述预设逻辑函数存储文件,调用所加载的预设逻辑函数存储文件中的逻辑函,以执行所述目标CPU密集型任务。
可选的,所述代码执行引擎为v8 VM。
与现有技术相比,本方案将CPU密集型任务交给主进程内的不同于主线程的工作线程来处理,使得主线程可以处理CPU密集型任务以外的耗时短的I/O密集型任务,而工作线程可以处理CPU密集型任务。由于进程内的线程共享系统资源,并且,线程间通信效率较高,因此,可以达到在解决任务阻塞问题的同时,降低系统资源占用率和提高任务处理效率的目的。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例所提供的一种数据处理方法的流程图;
图2为本发明实施例所提供的一种数据处理装置的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
为了在解决任务阻塞问题的同时,降低系统资源占用率和提高任务处理效率,本发明实施例提供了一种数据处理方法及装置。
为了清楚起见,下面首先对本发明实施例所提供的一种数据处理方法进行介绍。
本领域技术人员可以理解的是,对于一个应用程序而言,其对应一个主进程,该主进程可以创建线程和其他进程,并且,所创建的第一个线程为主线程。并且,实现本发明实施例所提供的数据处理方法的功能模块为在Node.js内增加的C++模块。
如图1所示,一种数据处理方法,可以包括:
S101,基于Node.js所搭建的数据密集型实时应用程序的主进程内的主线程接收目标CPU密集型任务;
其中,对于存在I/O密集型任务和CPU密集型任务的基于Node.js所搭建的数据密集型实时应用程序而言,主进程内的主线程可以接收目标CPU密集型任务和I/O密集型任务。具体的,当该主线程接收到I/O密集型任务后,可以自行处理,且自行处理的过程与现有技术相同,在此不做介绍;而当该主线程接收到CPU密集型任务后,由于CPU密集型任务复杂且耗时,为了避免任务阻塞的问题,可以执行本实施例后续的步骤,即通过专门的负责执行CPU密集型任务的工作线程来处理该目标CPU密集型任务。
具体的,实际应用中,CPU密集型任务可以包括:对数据加/解密、数据压缩/解压和根据用户的身份对图片做些个性化处理等。并且,CPU密集型任务可以由用户发出,也可以在应用程序运行过程中由操作系统发出,这都是合理的。
S102,该主线程将该目标CPU密集型任务封装成目标数据处理任务;
具体的,该目标数据处理任务包括执行该目标CPU密集型任务所需的逻辑函数的名称以及所需传递的参数。其中,对该目标CPU密集型任务进行封装的目的是便于工作线程处理,且所封装成的目标数据处理任务的类型为工作线程能够处理的任务类型。
并且,需要强调的是,该目标数据处理任务所包括的执行该目标CPU密集型任务的逻辑函数以及所需传递的参数的确定方式可以与现有技术中通过主线程处理该目标CPU密集型任务时确定逻辑函数以及所需传递的参数的方式相同。
S103,该主线程将该目标数据处理任务提交到任务请求队列中;
其中,该任务请求队列为该主进程内的预设的工作线程所对应的用于接收主线程提交的数据处理任务的队列。
实际应用中,主线程在将该目标数据处理任务提交到任务请求队列中后,还可以激活预设信号,其中,该预设信号能够使得处于睡眠状态的工作线程获知。
为了清楚起见,需要说明的是,关于开辟工作线程的具体技术实现可以为:在主进程启动初始化过程中,加入一个创建工作线程的过程,从而完成工作线程的创建。其中,所创建的工作线程可以预设任务处理规则处理基于CPU密集型任务所封装成的数据处理任务,其对应一个用于接收主线程所提交的基于CPU密集型任务所封装成的数据处理任务的任务请求队列和用于放置待处理的基于CPU密集型任务所封装成的数据处理任务的任务处理队列;并且,可以在处理完毕任务处理队列中的任务后,检测任务请求队列,如果任务请求队列中存在数据处理任务则将所存在的任务转移至任务处理队列,而在任务请求队列中不存在任务时,该工作线程会处于睡眠状态,直到检测到主线程提交数据处理任务到任务请求队列中后所激活的预设信号。
S104,该工作线程在到达预设处理时机时,将该任务请求队列中的该目标数据处理任务转移至任务处理队列中;
需要说明的是,对于该工作线程处于运行状态时,预设处理时机可以为:该工作线程按照预设任务处理规则检测该任务请求队列的时刻。对于这种情况而言,即使主线程激活预设信号,该工作线程也不会立即将目标数据处理任务转移到任务处理队列中,而是达到该工作线程按照预设任务处理规则检测该任务请求队列的时刻时,将该任务请求队列中的该目标数据处理任务转移至任务处理队列中。
需要说明的是,该工作线程可以处于睡眠状态;
该主线程将该目标数据处理任务提交到任务请求队列中后,还可以包括:
激活预设信号,其中,该预设信号能够使得处于睡眠状态的工作线程获知;
该预设处理时机可以为:该工作线程获知该主线程所激活的预设信号的时刻。
S105,该工作线程运行预先建立的代码执行引擎,基于该任务处理队列中的目标数据处理任务所包含的执行该目标CPU密集型任务所需的逻辑函数的名称以及所需传递的参数,调用预设逻辑函数存储文件中的逻辑函数,以执行该目标CPU密集型任务;
其中,该工作线程在将该任务请求队列中的该目标数据处理任务转移至任务处理队列中后,该工作线程可以运行预先建立的代码执行引擎,基于该任务处理队列中的目标数据处理任务所包含的执行该目标CPU密集型任务所需的逻辑函数的名称以及所需传递的参数,调用预设逻辑函数存储文件中的逻辑函数,以执行该目标CPU密集型任务。具体的,该代码执行引擎可以为v8 VM,当然并不局限与此。
需要强调的是,在工作线程处理主线程所提交的任务之前,可以建立该工作线程所对应的代码执行引擎,专门用于执行预设逻辑函数存储文件中的代码,其中,该工作线程的代码执行引擎可以与主线程的代码执行引擎并行执行,并且,该工作线程的代码执行引擎的生命周期与主线程的代码执行引擎的生命周期相同。并且,建立该工作线程所对应的代码执行引擎的方式可以采用现有技术实现,例如:具体方式可以与建立主线程所对应的代码执行引擎的方式相同。实际应用中,该预设逻辑函数存储文件内的逻辑函数可以通过js脚本语言编写。
当然,该预设逻辑函数存储文件内的逻辑函数可以通过C++语言编写;
相应的,调用预设逻辑函数存储文件中的逻辑函数,可以包括:
加载该预设逻辑函数存储文件;
调用所加载的预设逻辑函数存储文件中的逻辑函数。
需要强调的是,对于预设逻辑函数存储文件中的逻辑函数通过js脚本语言编写的情况而言,由于js脚本语言编写的逻辑函数中处理json格式的字符串是非常容易的,因此,为了简化处理逻辑,目标数据处理任务中的所需传递的参数可以采用json格式的字符串,此时,调用预设逻辑函数存储文件中的逻辑函数后的返回值也为json格式的字符串。
S106,该工作线程在该目标CPU密集型任务被执行完毕后,通过线程间通信方式通知该主线程;
S107,该主线程接收该工作线程发出的关于任务执行完毕的通知;
S108,该主线程通过执行回调函数获得该目标CPU密集型任务对应的结果。
具体的,该工作线程在该目标CPU密集型任务被执行完毕后,可以通过现有的线程间通信方式通知该主线程;而该主线程在接收到该工作线程发出的关于任务执行完毕的通知后,可以通过执行现有技术中的回调函数获得该目标CPU密集型任务对应的结果,进而基于该结果执行该目标CPU密集型任务对应的处理。具体的,基于该结果执行该目标CPU密集型任务对应的处理可以例如:输出以展示给用户,或者,利用该结果继续执行后续的运算处理等。
简而言之,主线程生成一个关于CPU密集型任务的目标数据处理任务,在该目标数据处理任务中指定好执行CPU密集型任务所需的逻辑函数和所需传递的参数,进而该主线程将该目标数据处理任务抛给工作线程;而该工作线程在执行该目标数据处理任务过程中调用逻辑函数存储文件中的相应的逻辑函数,进而完成该CPU密集型任务。
与现有技术相比,本方案将CPU密集型任务交给主进程内的不同于主线程的工作线程来处理,使得主线程可以处理CPU密集型任务以外的耗时短的I/O密集型任务,而工作线程可以处理CPU密集型任务。由于进程内的线程共享系统资源,并且,线程间通信效率较高,因此,可以达到在解决任务阻塞问题的同时,降低系统资源占用率和提高任务处理效率的目的。
相应于上述方法实施例,本发明实施例还提供了一种数据处理装置,如图2所示,可以包括:
用于执行基于Node.js所搭建的数据密集型实时应用程序的主进程内的主线程的功能的主线程模块210、用于执行基于Node.js所搭建的数据密集型实时应用程序的主进程内的工作线程的功能的工作线程模块220;
所述主线程模块210包括任务接收子模块211、任务封装子模块212、任务提交子模块213、通知接收子模块214和结果处理子模块215,所述工作线程模块220包括任务转移子模块221、任务处理子模块222和通知发送子模块223;
其中,所述任务接收子模块211,用于接收目标CPU密集型任务;
所述任务封装子模块212,用于将所述目标CPU密集型任务封装成目标数据处理任务,其中,所述目标数据处理任务包括执行所述目标CPU密集型任务所需的逻辑函数的名称以及所需传递的参数;
所述任务提交子模块213,用于将所述目标数据处理任务提交到任务请求队列中,其中,其中,该任务请求队列为该主进程内的预设的工作线程所对应的用于接收主线程提交的数据处理任务的队列;
所述任务转移子模块221,用于在到达预设处理时机时,将所述任务请求队列中的所述目标数据处理任务转移至任务处理队列中;
所述任务处理子模块222,用于运行预先建立的代码执行引擎,基于所述任务处理队列中的目标数据处理任务所包含的执行所述目标CPU密集型任务所需的逻辑函数的名称以及所需传递的参数,调用预设逻辑函数存储文件中的逻辑函数,以执行所述目标CPU密集型任务;
所述通知发送子模块223,用于在所述目标CPU密集型任务被执行完毕后,通过线程间通信方式通知所述主线程;
所述通知接收子模块214,用于接收所述工作线程发出的关于任务执行完毕的通知;
所述结果处理子模块215,用于通过执行回调函数获得所述目标CPU密集型任务对应的结果。
与现有技术相比,本方案将CPU密集型任务交给主进程内的不同于主线程的工作线程来处理,使得主线程可以处理CPU密集型任务以外的耗时短的I/O密集型任务,而工作线程可以处理CPU密集型任务。由于进程内的线程共享系统资源,并且,线程间通信效率较高,因此,可以达到在解决任务阻塞问题的同时,降低系统资源占用率和提高任务处理效率的目的。
具体的,所述工作线程处于运行状态;
所述预设处理时机为:所述工作线程按照预设任务处理规则检测所述任务请求队列的时刻。
具体的,所述工作线程处于睡眠状态;
所述主线程模块210,还可以包括:信号激活子模块,用于将所述目标数据处理任务提交到任务请求队列中后,激活预设信号,其中,所述预设信号能够使得处于睡眠状态的工作线程获知;
所述预设处理时机可以为:所述工作线程获知所述主线程所激活的预设信号的时刻。
具体的,所述预设逻辑函数存储文件内的逻辑函数通过js脚本语言编写。
具体的,所述预设逻辑函数存储文件内的逻辑函数通过C++语言编写;
所述任务处理子模块222,具体用于运行预先建立的代码执行引擎,基于所述任务处理队列中的目标数据处理任务所包含的执行所述目标CPU密集型任务所需的逻辑函数的名称以及所需传递的参数,加载所述预设逻辑函数存储文件,调用所加载的预设逻辑函数存储文件中的逻辑函,以执行所述目标CPU密集型任务。
具体的,所述代码执行引擎可以为v8 VM。
对于系统或装置实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个......”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本领域普通技术人员可以理解实现上述方法实施方式中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,所述的程序可以存储于计算机可读取存储介质中,这里所称得的存储介质,如:ROM/RAM、磁碟、光盘等。
以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。
Claims (12)
1.一种数据处理方法,其特征在于,包括:
基于Node.js所搭建的数据密集型实时应用程序的主进程内的主线程接收目标CPU密集型任务,并将所述目标CPU密集型任务封装成目标数据处理任务,其中,所述目标数据处理任务包括执行所述目标CPU密集型任务所需的逻辑函数的名称以及所需传递的参数;
所述主线程将所述目标数据处理任务提交到任务请求队列中,其中,该任务请求队列为该主进程内的预设的工作线程所对应的用于接收主线程提交的数据处理任务的队列;
所述工作线程在到达预设处理时机时,将所述任务请求队列中的所述目标数据处理任务转移至任务处理队列中,并运行预先建立的代码执行引擎,基于所述任务处理队列中的目标数据处理任务所包含的执行所述目标CPU密集型任务所需的逻辑函数的名称以及所需传递的参数,调用预设逻辑函数存储文件中的逻辑函数,以执行所述目标CPU密集型任务;
所述工作线程在所述目标CPU密集型任务被执行完毕后,通过线程间通信方式通知所述主线程;
所述主线程接收所述工作线程发出的关于任务执行完毕的通知,通过执行回调函数获得所述目标CPU密集型任务对应的结果。
2.根据权利要求1所述的方法,其特征在于,所述工作线程处于运行状态;
所述预设处理时机为:所述工作线程按照预设任务处理规则检测所述任务请求队列的时刻。
3.根据权利要求1所述的方法,其特征在于,所述工作线程处于睡眠状态;
所述主线程将所述目标数据处理任务提交到任务请求队列中后,还包括:
激活预设信号,其中,所述预设信号能够使得处于睡眠状态的工作线程获知;
所述预设处理时机为:所述工作线程获知所述主线程所激活的预设信号的时刻。
4.根据权利要求1-3任意一项所述的方法,其特征在于,所述预设逻辑函数存储文件内的逻辑函数通过js脚本语言编写。
5.根据权利要求1-3任意一项所述的方法,其特征在于,所述预设逻辑函数存储文件内的逻辑函数通过C++语言编写;
调用预设逻辑函数存储文件中的逻辑函数,包括:
加载所述预设逻辑函数存储文件;
调用所加载的预设逻辑函数存储文件中的逻辑函数。
6.根据权利要求1-3任意一项所述的方法,其特征在于,所述代码执行引擎为v8 VM。
7.一种数据处理装置,其特征在于,包括:
用于执行基于Node.js所搭建的数据密集型实时应用程序的主进程内的主线程的功能的主线程模块、用于执行基于Node.js所搭建的数据密集型实时应用程序的主进程内的工作线程的功能的工作线程模块;所述主线程模块包括任务接收子模块、任务封装子模块、任务提交子模块、通知接收子模块和结果处理子模块,所述工作线程模块包括任务转移子模块、任务处理子模块和通知发送子模块;
其中,所述任务接收子模块,用于接收目标CPU密集型任务;
所述任务封装子模块,用于将所述目标CPU密集型任务封装成目标数据处理任务,其中,所述目标数据处理任务包括执行所述目标CPU密集型任务所需的逻辑函数的名称以及所需传递的参数;
所述任务提交子模块,用于将所述目标数据处理任务提交到任务请求队列中,其中,所述任务请求队列为所述主进程内的预设的工作线程所对应的用于接收主线程提交的数据处理任务的队列;
所述任务转移子模块,用于在到达预设处理时机时,将所述任务请求队列中的所述目标数据处理任务转移至任务处理队列中;
所述任务处理子模块,用于运行预先建立的代码执行引擎,基于所述任务处理队列中的目标数据处理任务所包含的执行所述目标CPU密集型任务所需的逻辑函数的名称以及所需传递的参数,调用预设逻辑函数存储文件中的逻辑函数,以执行所述目标CPU密集型任务;
所述通知发送子模块,用于在所述目标CPU密集型任务被执行完毕后,通过线程间通信方式通知所述主线程;
所述通知接收子模块,用于接收所述工作线程发出的关于任务执行完毕的通知;
所述结果处理子模块,用于通过执行回调函数获得所述目标CPU密集型任务对应的结果。
8.根据权利要求7所述的装置,其特征在于,所述工作线程处于运行状态;
所述预设处理时机为:所述工作线程按照预设任务处理规则检测所述任务请求队列的时刻。
9.根据权利要求7所述的装置,其特征在于,所述工作线程处于睡眠状态;
所述主线程模块,还包括:信号激活子模块,用于将所述目标数据处理任务提交到任务请求队列中后,激活预设信号,其中,所述预设信号能够使得处于睡眠状态的工作线程获知;
所述预设处理时机为:所述工作线程获知所述主线程所激活的预设信号的时刻。
10.根据权利要求7-9任意一项所述的装置,其特征在于,所述预设逻辑函数存储文件内的逻辑函数通过js脚本语言编写。
11.根据权利要求7-9任意一项所述的装置,其特征在于,所述预设逻辑函数存储文件内的逻辑函数通过C++语言编写;所述任务处理子模块,具体用于运行预先建立的代码执行引擎,基于所述任务处理队列中的目标数据处理任务所包含的执行所述目标CPU密集型任务所需的逻辑函数的名称以及所需传递的参数,加载所述预设逻辑函数存储文件,调用所加载的预设逻辑函数存储文件中的逻辑函,以执行所述目标CPU密集型任务。
12.根据权利要求7-9任意一项所述的装置,其特征在于,所述代码执行引擎为v8 VM。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410486131.5A CN104216768B (zh) | 2014-09-22 | 2014-09-22 | 一种数据处理方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410486131.5A CN104216768B (zh) | 2014-09-22 | 2014-09-22 | 一种数据处理方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104216768A true CN104216768A (zh) | 2014-12-17 |
CN104216768B CN104216768B (zh) | 2017-12-01 |
Family
ID=52098293
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410486131.5A Active CN104216768B (zh) | 2014-09-22 | 2014-09-22 | 一种数据处理方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104216768B (zh) |
Cited By (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104572284A (zh) * | 2015-01-08 | 2015-04-29 | 盟游(北京)科技有限公司 | 任务实现装置和方法、以及应用 |
CN104734979A (zh) * | 2015-04-07 | 2015-06-24 | 北京极科极客科技有限公司 | 一种路由器外接存储设备的控制方法 |
CN105426326A (zh) * | 2015-11-05 | 2016-03-23 | 上海斐讯数据通信技术有限公司 | 一种实现高并发的队列存储方法及系统 |
CN106933667A (zh) * | 2017-04-01 | 2017-07-07 | 成都市极米科技有限公司 | 传感器数据处理方法及装置 |
CN107016295A (zh) * | 2017-03-01 | 2017-08-04 | 武汉斗鱼网络科技有限公司 | 一种实现数据加解密的方法及系统 |
CN107391281A (zh) * | 2017-08-09 | 2017-11-24 | 腾讯科技(深圳)有限公司 | 一种服务器的数据处理方法、装置和存储介质 |
CN107766532A (zh) * | 2017-10-27 | 2018-03-06 | 深圳市行云易通科技有限公司 | 一种前端Node.js自动化正静态方法 |
CN108509277A (zh) * | 2018-04-03 | 2018-09-07 | 中国电子科技集团公司第七研究所 | 电子锁串口异步接收处理系统及方法 |
CN109542642A (zh) * | 2018-11-15 | 2019-03-29 | 网宿科技股份有限公司 | 一种前端任务处理的方法及装置 |
CN109753358A (zh) * | 2018-12-26 | 2019-05-14 | 新华三技术有限公司合肥分公司 | 任务处理方法及装置 |
CN109840149A (zh) * | 2019-02-14 | 2019-06-04 | 百度在线网络技术(北京)有限公司 | 任务调度方法、装置、设备及存储介质 |
CN110020359A (zh) * | 2017-11-08 | 2019-07-16 | 亿阳信通股份有限公司 | 应用在网页前端的数据处理方法、装置及存储介质 |
CN110673792A (zh) * | 2019-09-10 | 2020-01-10 | 苏州浪潮智能科技有限公司 | 存储设备的任务处理方法、装置、设备及可读存储介质 |
CN111124715A (zh) * | 2019-12-26 | 2020-05-08 | 苏州思必驰信息科技有限公司 | 一种信息处理方法、网络进程单元和计算机可读存储介质 |
CN111324474A (zh) * | 2020-02-18 | 2020-06-23 | 上海携程商务有限公司 | Celery任务管理方法、系统、设备及存储介质 |
CN111813529A (zh) * | 2020-07-20 | 2020-10-23 | 腾讯科技(深圳)有限公司 | 数据处理方法、装置、电子设备及存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080120489A1 (en) * | 2006-11-16 | 2008-05-22 | Shinri Inamori | Scalable Multi-Threaded Sequencing/Synchronizing Processor Architecture |
US20100037242A1 (en) * | 2008-08-11 | 2010-02-11 | Sandya Srivilliputtur Mannarswamy | System and method for improving run-time performance of applications with multithreaded and single threaded routines |
US20100100889A1 (en) * | 2008-10-16 | 2010-04-22 | International Business Machines Corporation | Accelerating mutual exclusion locking function and condition signaling while maintaining priority wait queues |
CN103902319A (zh) * | 2012-12-30 | 2014-07-02 | 青岛海尔软件有限公司 | 基于服务器端javascript的热部署方法 |
-
2014
- 2014-09-22 CN CN201410486131.5A patent/CN104216768B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080120489A1 (en) * | 2006-11-16 | 2008-05-22 | Shinri Inamori | Scalable Multi-Threaded Sequencing/Synchronizing Processor Architecture |
US20100037242A1 (en) * | 2008-08-11 | 2010-02-11 | Sandya Srivilliputtur Mannarswamy | System and method for improving run-time performance of applications with multithreaded and single threaded routines |
US20100100889A1 (en) * | 2008-10-16 | 2010-04-22 | International Business Machines Corporation | Accelerating mutual exclusion locking function and condition signaling while maintaining priority wait queues |
CN103902319A (zh) * | 2012-12-30 | 2014-07-02 | 青岛海尔软件有限公司 | 基于服务器端javascript的热部署方法 |
Non-Patent Citations (1)
Title |
---|
陆凌牛: "Node.js权威指南", 《NODE.JS权威指南》 * |
Cited By (23)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104572284B (zh) * | 2015-01-08 | 2019-03-15 | 游道易(北京)科技有限公司 | 任务实现装置和方法、以及应用 |
CN104572284A (zh) * | 2015-01-08 | 2015-04-29 | 盟游(北京)科技有限公司 | 任务实现装置和方法、以及应用 |
CN104734979A (zh) * | 2015-04-07 | 2015-06-24 | 北京极科极客科技有限公司 | 一种路由器外接存储设备的控制方法 |
CN105426326A (zh) * | 2015-11-05 | 2016-03-23 | 上海斐讯数据通信技术有限公司 | 一种实现高并发的队列存储方法及系统 |
CN107016295A (zh) * | 2017-03-01 | 2017-08-04 | 武汉斗鱼网络科技有限公司 | 一种实现数据加解密的方法及系统 |
CN106933667A (zh) * | 2017-04-01 | 2017-07-07 | 成都市极米科技有限公司 | 传感器数据处理方法及装置 |
CN107391281A (zh) * | 2017-08-09 | 2017-11-24 | 腾讯科技(深圳)有限公司 | 一种服务器的数据处理方法、装置和存储介质 |
CN107766532A (zh) * | 2017-10-27 | 2018-03-06 | 深圳市行云易通科技有限公司 | 一种前端Node.js自动化正静态方法 |
CN110020359A (zh) * | 2017-11-08 | 2019-07-16 | 亿阳信通股份有限公司 | 应用在网页前端的数据处理方法、装置及存储介质 |
CN110020359B (zh) * | 2017-11-08 | 2024-04-05 | 亿阳信通股份有限公司 | 应用在网页前端的数据处理方法、装置及存储介质 |
CN108509277A (zh) * | 2018-04-03 | 2018-09-07 | 中国电子科技集团公司第七研究所 | 电子锁串口异步接收处理系统及方法 |
CN109542642A (zh) * | 2018-11-15 | 2019-03-29 | 网宿科技股份有限公司 | 一种前端任务处理的方法及装置 |
CN109753358A (zh) * | 2018-12-26 | 2019-05-14 | 新华三技术有限公司合肥分公司 | 任务处理方法及装置 |
CN109753358B (zh) * | 2018-12-26 | 2021-01-01 | 新华三技术有限公司合肥分公司 | 任务处理方法及装置 |
CN109840149A (zh) * | 2019-02-14 | 2019-06-04 | 百度在线网络技术(北京)有限公司 | 任务调度方法、装置、设备及存储介质 |
CN110673792A (zh) * | 2019-09-10 | 2020-01-10 | 苏州浪潮智能科技有限公司 | 存储设备的任务处理方法、装置、设备及可读存储介质 |
CN110673792B (zh) * | 2019-09-10 | 2022-08-02 | 苏州浪潮智能科技有限公司 | 存储设备的任务处理方法、装置、设备及可读存储介质 |
CN111124715A (zh) * | 2019-12-26 | 2020-05-08 | 苏州思必驰信息科技有限公司 | 一种信息处理方法、网络进程单元和计算机可读存储介质 |
CN111124715B (zh) * | 2019-12-26 | 2022-07-29 | 思必驰科技股份有限公司 | 一种信息处理方法、网络进程单元和计算机可读存储介质 |
CN111324474A (zh) * | 2020-02-18 | 2020-06-23 | 上海携程商务有限公司 | Celery任务管理方法、系统、设备及存储介质 |
CN111324474B (zh) * | 2020-02-18 | 2023-04-18 | 上海携程商务有限公司 | Celery任务管理方法、系统、设备及存储介质 |
CN111813529A (zh) * | 2020-07-20 | 2020-10-23 | 腾讯科技(深圳)有限公司 | 数据处理方法、装置、电子设备及存储介质 |
CN111813529B (zh) * | 2020-07-20 | 2023-12-12 | 腾讯科技(深圳)有限公司 | 数据处理方法、装置、电子设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN104216768B (zh) | 2017-12-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104216768A (zh) | 一种数据处理方法及装置 | |
CN107526624B (zh) | 一种基于Java虚拟机的智能合约执行引擎 | |
KR101971389B1 (ko) | 연합 기반 메모리 관리 | |
CN107491346A (zh) | 一种应用的任务处理方法、装置及系统 | |
CN103365718A (zh) | 一种线程调度方法、线程调度装置及多核处理器系统 | |
CN106844017A (zh) | 用于网站服务器处理事件的方法和设备 | |
CN105335229A (zh) | 一种业务资源的调度方法和装置 | |
CN102917052A (zh) | 一种云计算系统中资源分配的方法 | |
CN109542642A (zh) | 一种前端任务处理的方法及装置 | |
US20100211680A1 (en) | Apparatus and method to allocate limited resources | |
CN105874773A (zh) | 任务处理装置、智能设备、任务处理方法及基带处理器 | |
CN103631736A (zh) | 设备资源控制方法和装置 | |
JP2019083009A5 (zh) | ||
CN106462448A (zh) | 多操作系统设备、通知设备及其方法 | |
CN105847319A (zh) | 一种移动终端网络请求方法及系统 | |
CN103246557A (zh) | 一种跨进程调用应用信息的方法及装置 | |
CN108776633B (zh) | 监控进程运行的方法、终端设备及计算机可读存储介质 | |
CN104407917B (zh) | 一种基于jms的交易处理方法及装置 | |
CN112636978A (zh) | 安全事件处理方法、装置、设备及计算机可读存储介质 | |
CN112395062A (zh) | 任务处理方法、装置、设备及计算机可读存储介质 | |
CN111541646A (zh) | 一种增强密码机安全服务接入能力的方法 | |
WO2016095373A1 (zh) | 业务处理方法及装置 | |
US9766940B2 (en) | Enabling dynamic job configuration in mapreduce | |
CN102915256B (zh) | 多核浏览器下的消息传递方法与装置 | |
CN108197029B (zh) | 一种获取进程信息的方法和设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right |
Effective date of registration: 20181212 Address after: Room 105-53811, No. 6 Baohua Road, Hengqin New District, Zhuhai City, Guangdong Province Patentee after: Zhuhai Leopard Technology Co.,Ltd. Address before: 100085 East District, Second Floor, 33 Xiaoying West Road, Haidian District, Beijing Patentee before: BEIJING KINGSOFT INTERNET SECURITY SOFTWARE Co.,Ltd. |
|
TR01 | Transfer of patent right |