计算机函数方法的执行方法和装置与流程

文档序号:14777918发布日期:2018-06-26 07:49阅读:184来源:国知局

本申请涉及计算机数据处理领域,尤其涉及一种计算机函数方法的执行方法和装置。



背景技术:

目前,随着互联网技术的蓬勃发展,互联网用户的数量猛增,网络计算机系统的用户体验好坏会直接导致网站或网络计算机系统是否能得到用户的欢迎,而网络计算机系统后端繁重的业务流程,使用户每次对网络计算机系统的请求都要等待越来越长的时间才能得到响应,如何提高网络计算机系统的响应速度,是技术人员较为头疼的一个技术问题。

在现有技术中,在网络的计算机系统调用某个函数方法的时候,如图1为现有技术中调用函数方法时的类依赖示例图,图2为现有技术中的函数方法执行伪码实例图,如调用函数方法save(param),该函数方法内部包括三个对象即对象A、对象B、和对象C,其中:

对象A对应的执行方法为saveDb(Param),用于保存数据库;

对象B对应的执行方法为saveCache(Param),用于保存缓存;

对象C对应的执行方法为saveToThirdSystem(Prarm),用于保存第三方系统,即将保存内容发送给第三方系统进行保存;

如图3所示为现有技术的函数方法执行流程示例图,上述三个对象的执行方法的执行过程是一个阻塞等待的过程,即只有当对象A的执行方法保存数据库完成后,才进行对象B的执行方法即保存缓存,只有当对象B的执行方法即保存缓存完成后,才进行对象C的执行方法即保存第三方系统。

现有技术存在以下缺点:

现有技术中存在执行时间浪费的情况,即对象A的执行方法的执行过程中,对象B和对象C的执行方法都在等待,对象B的执行方法在执行过程中,对象C的执行方法在等待,这个函数方法save(param)执行的时间,是3个对象的执行方法的执行时间的总和,即T=Ta+Tb+Tc。这种情况,用户就会等待更长的时间,才能得到响应,导致计算机系统的响应速度较慢。



技术实现要素:

有鉴于此,本发明的主要目的是提供一种计算机函数方法的执行方法和装置,以提高计算机系统的响应速度。

本发明的技术方案是这样实现的:

一种计算机函数方法的执行方法,包括:

确定函数方法中包括的二个以上源对象,对所述各源对象进行代理封装,分别得到对应的二个以上源对象代理;

在触发执行所述函数方法后,由所述各个源对象代理将对应的源对象的执行方法封装成任务对象,将所述任务对象放入任务池中,生成该任务对象对应的结果代理对象,将该结果代理对象放入结果代理对象池中,并将该结果代理对象返回给所述函数方法;

利用任务执行线程池中的二个以上的线程对所述任务池中的任务对象并行执行处理,将任务对象的执行结果赋值给所述结果代理对象池中的、该任务对象对应的结果代理对象;

所述函数方法从返回的源对象对应的结果代理对象中,获取到已经赋值的执行结果,作为该源对象的执行结果。

在所述方法的一种优选实施例中,所述对源对象进行代理封装的过程,是在计算机系统启动对应的应用系统时,进行的封装操作。

在所述方法的一种优选实施例中,所述源对象代理中包含对应的源对象,同时包含引用方法,在该引用方法中将该源对象的执行方法触发封装为任务对象。

在所述方法的一种优选实施例中,所述任务对象具有唯一的任务标识,当所述线程执行完所述任务对象并返回执行结果后,根据该任务标识从所述结果代理对象池中查找该任务对象对应的结果代理对象,将该执行结果赋值给该结果代理对象。

一种计算机函数方法的执行装置,包括:

第一模块,用于确定函数方法中包括的二个以上源对象,对所述各源对象进行代理封装,分别得到对应的二个以上源对象代理;

第二模块,用于在触发执行所述函数方法后,触发所述各个源对象代理将对应的源对象的执行方法封装成任务对象,将所述任务对象放入任务池中,生成该任务对象对应的结果代理对象,将该结果代理对象放入结果代理对象池中,并将该结果代理对象返回给所述函数方法;

第三模块,用于利用任务执行线程池中的二个以上的线程对所述任务池中的任务对象并行执行处理,将任务对象的执行结果赋值给所述结果代理对象池中的、该任务对象对应的结果代理对象;

第四模块,用于所述函数方法从返回的源对象对应的结果代理对象中,获取到已经赋值的执行结果,作为该源对象的执行结果。

在所述方法的一种优选实施例中,所述第一模块对源对象进行代理封装的过程,是在计算机系统启动对应的应用系统时,进行的封装操作。

在所述方法的一种优选实施例中,所述源对象代理中包含对应的源对象,同时包含引用方法,在该引用方法中将该源对象的执行方法触发封装为任务对象。

在所述方法的一种优选实施例中,所述任务对象具有唯一的任务标识;所述第三模块具体用于:在当所述线程执行完所述任务对象并返回执行结果后,根据该任务标识从所述结果代理对象池中查找该任务对象对应的结果代理对象,将该执行结果赋值给该结果代理对象。

与现有技术相比,本发明针对现有技术中存在的方法执行时间存在浪费的情况,采用源对象代理、结果对象代理的方法,对函数方法中的二个以上源对象对应的执行方法封装成任务对象放入任务池中,在执行时利用任务执行线程池中的二个以上的线程对所述任务池中的任务对象并行执行处理,这样就可以使得函数方法中的二个以上的源对象对应的执行方法可以并行处理,因此本发明相对于现有技术的串行阻塞执行方案,可以大幅提高计算机系统的响应速度,尤其是在网络的中的计算机系统,可以大大降低请求响应的时间,提高用户体验。

附图说明

图1为现有技术中调用函数方法时的类依赖示例图;

图2为现有技术中的函数方法执行伪码实例图;

图3所示为现有技术的函数方法执行流程示例图;

图4为本发明所述计算机函数方法的执行方法的一种流程示意图;

图5所示为本发明对源对象进行代理封装后得到的类和方法的一种关系图;

图6为本发明所述函数方法中的一个源对象方法的代理执行示意图;

图7为本发明所述类ResultProxy所执行的方法结果代理执行实例图;

图8为本发明所述函数方法执行过程的又一种示意图。

具体实施方式

下面结合附图及具体实施例对本发明再作进一步详细的说明。

图4为本发明所述计算机函数方法的执行方法的一种流程示意图,参见图4,本发明的方法主要包括:

步骤401、确定函数方法中包括的二个以上源对象,对所述各源对象进行代理封装,分别得到对应的二个以上源对象代理;

步骤402、在触发执行所述函数方法后,由所述各个源对象代理将对应的源对象的执行方法封装成任务对象,将所述任务对象放入任务池中,生成该任务对象对应的结果代理对象,将该结果代理对象放入结果代理对象池中,并将该结果代理对象返回给所述函数方法;

步骤403、利用任务执行线程池中的二个以上的线程对所述任务池中的任务对象并行执行处理,将任务对象的执行结果赋值给所述结果代理对象池中的、该任务对象对应的结果代理对象;

步骤404、所述函数方法从返回的源对象对应的结果代理对象中,获取到已经赋值的执行结果,作为该源对象的执行结果。

下面以图1所述函数方法save(Prarm)为例对本发明的执行方法进行说明。假设图1所述的函数方法为save(Prarm),利用计算机术语称该函数方法为类O。该函数方法save(Prarm)中包括二个以上源对象,例如此处为包括三个源对象A、B、和C,在计算机语言的术语中,这三个源对象分别对应三个类,即类A、类B、和类C。

所述的类,是计算机语言中的一种专有术语,类是具备某些共同特征的实体的集合,它是一种抽象的概念;用程序设计的语言来说,类是一种抽象的数据类型,它是对所具有相同特征实体的抽象;在计算机语言术语中,所谓对象就是真实世界中的实体,对象与实体是一一对应的,也就是说现实世界中每一个实体都是一个对象,对象是一种具体的概念;类是对象的集合,对象是类的实例。

鉴于类是计算机语言中的一种专有术语,是和对象相对应的。因此在本发明的说明书中,将对象及其对应的类作为等同的概念来对待,本领域普通技术人员可以理解这种等同关系。所以在本说明书中,所述源对象A可以认为是类A,源对象B也可以认为是类B,源对象C也可以认为是类C。但是本领域普通技术人员在按照本说明书编写计算机代码时,需要按照计算机语言的格式要求进行自行区分。

参见图1,所述类A对应方法saveDB(Prarm),类B对应方法saveCache(Prarm),类C对应方法saveToThirdSystem(Prarm)。也就是说如果执行所述函数方法save(Prarm),最终实质上是要执行类A对应方法saveDB(Prarm)、类B对应方法saveCache(Prarm)、以及类C对应方法saveToThirdSystem(Prarm),最终所述类A、类B和类C这三个方法的执行结果返回给函数方法save(Prarm),函数方法save(Prarm)才执行完毕。

如图5所示为本发明对源对象进行代理封装后得到的类和方法的一种关系图。所述对所述各源对象进行代理封装,例如对所述三个源对象A、B、和C进行代理封装后,形成了三个源对象代理AProxy、BProxy、和CProxy,分别对应类AProxy、类BProxy类CProxy。所述源对象代理AProxy、BProxy、CProxy中包含真实的源对象A、B、C,同时都包含引用方法invoke()。当触发源对象A的方法saveDb(Param)时,其实真实触发的是源对象代理AProxy封装类的invoke()方法,之后在invoke()中触发源对象A的执行方法即a.saveDb(Param)方法,这样就可以在触发a.saveDb(Param)的前后做各种控制操作。触发源对象B和触发源对象C也类似。

所述对源对象进行代理封装的过程是计算机系统在启动对应的应用系统时,进行的封装操作,即之前类O中设置的对象是源对象A、B、和C,现在变成了源对象代理AProxy、BProxy、和CProxy。

在步骤402中,还是以所述函数方法save(Prarm)为例进行说明。计算机的主线程触发该函数方法save(Prarm)后,需要分别执行该函数方法内的源对象的方法,即:a.saveDb(Param)方法,b.saveCache(Param)方法和c.saveToThirdSystem(Prarm)方法。有别于现有技术的执行方法,本发明的执行方法可以实现将所述二个以上源对象的方法并行执行。

下面以执行a.saveDb(Param)方法为例进行说明。图6为本发明所述函数方法中的一个源对象方法的代理执行示意图。参见图6,即计算机的主线程触发该函数方法save(Prarm)后,执行a.saveDb(Param)方法主要包括以下步骤421~步骤423:

步骤421、所述函数方法save(Prarm)中的源对象代理AProxy被触发,开始执行其内部的方法即AProxy.invoke()方法。该AProxy.invoke()方法将源对象的执行方法即a.saveDb(Param)方法的触发封装成任务(Task)对象,假设此处为任务对象A,并将该任务对象A放入任务对象池中,所述任务对象A描述了如何执行所述a.saveDb(Param)方法。本发明中,所述每个任务对象都有唯一的标识TaskId。

步骤422、生成上一步中所述任务对象对应的结果代理对象(ResultProxy对象),假设此处为结果代理对象A,并将该结果代理对象A放到结果代理对象池(ResultProxy池)中,且通过所述TaskId可以在ResultProxy池中找到对应的ResultProxy对象。

步骤423、将ResultProxy对象返回给触发AProxy.invoke()的方法,即类O中的函数方法save(Param),也就是说将ResultProxy对象A通知给所述函数方法save(Param),即当该ResultProxy对象A被赋值后,该函数方法save(Param)可以得到该赋值,该赋值就是a.saveDb(Param)方法的执行结果。

类似的,依次按照上面所述步骤421~步骤423三个步骤执行b.saveCache(Param)方法和c.saveToThirdSystem(Prarm)方法。

对于源对象B的b.saveCache(Param)方法,由源对象代理BProxy.invoke()方法将源对象的执行方法即b.saveCache(Param)方法的触发封装成任务对象,假设此处为任务对象B,并将该任务对象B放入任务对象池中,该任务对象也有唯一的标识TaskId,然后生成该任务对象B对应的结果代理对象B,将该结果代理对象B放入结果代理对象池中,并将该结果代理对象B通知给所述函数方法save(Param),即当该结果代理对象B被赋值后,该函数方法save(Param)可以得到该赋值,该赋值就是b.saveCache(Param)方法的执行结果。

对于源对象C的c.saveToThirdSystem(Prarm)方法,源对象代理CProxy.invoke()方法将源对象的执行方法即c.saveToThirdSystem(Prarm)方法的触发封装成任务对象,假设此处为任务对象C,并将该任务对象C放入任务对象池中,该任务对象也有唯一的标识TaskId,然后生成该任务对象C对应的结果代理对象C,将该结果代理对象C放入结果代理对象池中,并将该结果代理对象C通知给所述函数方法save(Param),即当该结果代理对象C被赋值后,该函数方法save(Param)可以得到该赋值,该赋值就是c.saveToThirdSystem(Prarm)方法的执行结果。

执行完上述步骤后,在任务池中同时存在任务对象A、任务对象B、和任务对象C,在所述结果代理对象池中同时存在结果代理对象A、结果代理对象B、结果代理对象C。

步骤424、利用任务执行线程池中的二个以上的线程对所述任务池中的任务对象进行并行执行处理,即触发所述任务对象对应的方法,等待真实的执行结果RealResult。

步骤425、当真实的执行结果RealResult返回后,通过TaskId查询结果代理对象池中对应的结果代理对象,将真实的执行结果RealResult赋值到结果代理对象ResultProxy中。例如如果任务对象A的真实执行结果返回后,将该执行结果赋值到所述结果代理对象池中的结果代理对象A中,如果任务对象B的真实执行结果返回后,将该执行结果赋值到所述结果代理对象池中的结果代理对象B中,如果任务对象C的真实执行结果返回后,将该执行结果赋值到所述结果代理对象池中的结果代理对象C中。

此时,类O中的函数方法save(Param)得到的三个源对象对应方法返回对象都是代理对象ResultProxy,而代理对象中被赋值为所述源对象对应执行方法的真实执行结果,那么函数方法save(Param)将该执行结果作为对应源对象的执行结果。

进一步的,在优选实施例中,在执行完所述步骤421后,所生成的任务对象A即可被任务执行线程池中的线程执行了,所述步骤422、步骤423执行所花费的时间很少,和触发a.saveDb(Param)、b.saveCache(Param)和c.saveToThirdSystem(Prarm)并等待其执行结果返回所花费的时间可以忽略不计,上述三个源对象对应的三个执行方法几乎是并行同时执行的,因此相比现有技术的那种串行阻塞执行的方法,本发明的方法可以大大节省函数方法的执行时间,当计算机系统对函数方法采用本发明的方法后,可以大大提高计算机系统的响应时间,提高计算机系统的响应速度。

图5中,所述类ResultProxy是方法执行后的结果代理封装类,其中包括引用方法invoke(),其对象是RealResult和等待时间timeout。

当三个源对象对应的执行方法的ResultProxy都返回后,如果函数方法save(Param)中获取了第一个a.saveDb(Param)方法返回的ResultProxy中的赋值后,而其它两个源对象执行方法的ResultProxy赋值还为空,即其它两个源对象对应的任务对象还没有被线程执行完毕,则在类ResultProxy的invoke()方法需要等待,等待真实的执行结果赋值给所述ResultProxy对象中。图7为本发明所述类ResultProxy所执行的方法结果代理执行实例图。参见见图5和图7,每个ResultProxy都可以设置一个等待时间timeout,如果超过这个等待时间就为超时。

假设所述函数方法save(param)的三个源对象A、B、C对应的三个执行方法a.saveDb(Param)、b.saveCache(Param)和c.saveToThirdSystem(Prarm)的执行花费时间为Ta、Tb、Tc。则函数方法save(param)依次获取a.saveDb(Param)、b.saveCache(Param)和c.saveToThirdSystem(Prarm)三个方法的执行结果给ResultProxy中的对象返回的赋值,则等待的时间就是三个源对象执行方法中执行花费时间最长的那个时间,即max(Ta,Tb,Tc)。

所述函数方法对所述源对象的执行结果的使用,可以根据不同的场景来实现。例如有些场景中所述函数方法只需要其中源对象B的执行结果,则当所述源对象B的执行结果复制到所述结果代理对象B中后,该函数方法就可以得到该源对象B的执行结果,此时就完成了本函数方法的执行,不必需要再等待另外两个源对象的执行结果。

例如在有些场景中所述函数方法需要所述三个源对象的执行结果,则该函数方法需要等待所述三个源对象的执行结果都赋值后,则函数方法将所述执行结果整合后即完成了本函数方法的执行。

图8为本发明所述函数方法执行过程的又一种示意图。参见图8,利用本发明所述的方法,在执行函数方法时,由于将三个源对象的执行方法封装成任务对象放到任务池中,由任务执行线程池中的线程并行从所述任务池中读取任务进行执行,实际上该函数方法的三个源对象对应的执行方法A、执行方法B、执行方法C是并行执行的。当所述函数方法从返回的源对象对应的ResultProxy中,把所述三个源对象执行方法的执行结果都获取到后,进一步将所述执行结果进行整合,就可以结束本函数方法的执行过程。

由此可见,本发明采用源对象代理、结果对象代理的方法,对函数方法中的二个以上对象对应的执行方法进行并行调用;采用异步的方式对执行方法的请求进行处理;增加结果获取的阻塞等待和超时时间,保证逻辑的正常执行。本发明可以减少计算机应用系统的函数方法的执行时间,提高计算机系统的响应速度,让用户的请求得到最快的响应,提升用户的体验。

与上述方法相对应,本发明还公开了一种计算机函数方法的执行装置,包括:

第一模块,用于确定函数方法中包括的二个以上源对象,对所述各源对象进行代理封装,分别得到对应的二个以上源对象代理;

第二模块,用于在触发执行所述函数方法后,触发所述各个源对象代理将对应的源对象的执行方法封装成任务对象,将所述任务对象放入任务池中,生成该任务对象对应的结果代理对象,将该结果代理对象放入结果代理对象池中,并将该结果代理对象返回给所述函数方法;

第三模块,用于利用任务执行线程池中的二个以上的线程对所述任务池中的任务对象并行执行处理,将任务对象的执行结果赋值给所述结果代理对象池中的、该任务对象对应的结果代理对象;

第四模块,用于所述函数方法从返回的源对象对应的结果代理对象中,获取到已经赋值的执行结果,作为该源对象的执行结果。

在所述装置的一种优选实施例中,所述第一模块对源对象进行代理封装的过程,是在计算机系统启动对应的应用系统时,进行的封装操作。

在所述装置的一种优选实施例中,所述源对象代理中包含对应的源对象,同时包含引用方法,在该引用方法中将该源对象的执行方法触发封装为任务对象。

在所述装置的一种优选实施例中,所述任务对象具有唯一的任务标识;所述第三模块具体用于:在当所述线程执行完所述任务对象并返回执行结果后,根据该任务标识从所述结果代理对象池中查找该任务对象对应的结果代理对象,将该执行结果赋值给该结果代理对象。

另外,在本发明各个实施例中的各功能模块可以集成在一个处理单元中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。所述各实施例的功能模块可以位于一个终端或网络节点,或者也可以分布到多个终端或网络节点上。

另外,本发明的每一个实施例可以通过由数据处理设备如计算机执行的数据处理程序来实现。显然,数据处理程序构成了本发明。此外,通常存储在一个存储介质中的数据处理程序通过直接将程序读取出存储介质或者通过将程序安装或复制到数据处理设备的存储设备(如硬盘和或内存)中执行。因此,这样的存储介质也构成了本发明。存储介质可以使用任何类型的记录方式,例如纸张存储介质(如纸带等)、磁存储介质(如软盘、硬盘、闪存等)、光存储介质(如CD-ROM等)、磁光存储介质(如MO等)等。

因此本发明还公开了一种存储介质,其中存储有数据处理程序,该数据处理程序用于执行本发明上述方法的任何一种实施例。

另外,本发明所述的方法步骤除了可以用数据处理程序来实现,还可以由硬件来实现,例如,可以由逻辑门、开关、专用集成电路(ASIC)、可编程逻辑控制器和嵌入微控制器等来实现。因此这种可以实现本发明所述方法的硬件也可以构成本发明。

以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1