应用级推测性处理的制作方法
【专利摘要】本发明的一个或多个实施例是一种用于推测地执行应用事件响应的计算机实现的方法。该方法包括下述步骤:识别通过主进程执行的应用可以发出以待执行的一个或多个事件响应;对于每个事件响应,生成子进程以执行事件响应;确定包括在一个或多个事件响应中的第一事件响应已由应用发出以待执行;提交与第一事件响应相关联的子进程作为新的主进程;以及异常终止主进程和不同于与第一事件响应相关联的子进程的所有子进程。
【专利说明】应用级推测性处理
[0001]相关申请的交叉引用
[0002]本申请要求2011年10月26日提交的第13/282,059号美国临时专利申请的权益,其全部内容通过引用合并于此。
【技术领域】
[0003]本发明总体上涉及软件应用,具体地,涉及应用级推测性处理。
【背景技术】
[0004]许多应用都是事件驱动应用,以使得异步地引发(raise)事件,并且基于对该事件的响应执行一系列操作。对单个事件可以有多个响应,其中,每个响应启动不同的一系列操作。事件驱动应用的一个示例是允许用户创建对象的复杂三维(3D)模型的计算机建模软件应用。
[0005]尽管由事件响应启动的一些操作可以由计算装置迅速地执行,但是通常,由软件应用启动的操作需要若干个处理循环。当执行包括大量事件响应和操作的后续执行的工作流时,工作流中的每组操作都必须等待若干个处理循环来结束执行是非常冗长且耗时的。这样的等待时间是非常不期望的并且可能导致为了避免在等待执行结束时不得不花费相当大量的时间而执行不是最适宜的动作。
[0006]对上述问题的一个解决方案为代码的推测性执行。然而,为了使这样的推测性执行可行,需要非常小心地将代码设计成遵循支持推测性执行的预定义数据模型。这样的设计过程不仅困难以及增加开发时间,而且不是非常普及。因此,当今存在许多未被构建为支持推测性执行的软件应用。
[0007]如上述所说明,本领域需要的是用于减少执行应用响应于事件而启动的操作所需的处理循环的数量的机制。
【发明内容】
[0008]本发明的一个或多个实施例是用于推测性地执行应用事件响应的计算机实现的方法。该方法包括下述步骤:识别主进程执行的应用可以发出以待执行的一个或多个事件响应;对于每个事件响应,生成子进程以执行事件响应;确定包括在一个或多个事件响应中的第一事件响应已由应用发出以待执行;提交与第一事件响应相关联的子进程作为新的主进程;以及异常终止主进程和不同于与第一事件响应相关联的子进程的所有子进程。在另一实施例中,当提交与第一事件响应相关联的子进程时,子进程被吸收到主进程中并且主进程未终止。
[0009]有利地,通过推测性地发出待处理的事件响应,本文所描述的技术减少了处理事件响应的总等待时间。如果已推测性地处理了所选择的待下次处理的事件响应,则不需要后续处理。另外,甚至未被构建为支持推测性执行的应用也可以以考虑到事件响应的推测性发出的方式来执行。换句话说,本文所描述的技术可以追溯地应用于现有的事件驱动应用,从而避免对现有应用的数据模型进行重构(refactor)以支持推测性执行的耗时要求。【专利附图】
【附图说明】
[0010]为了可以详细地了解本发明的上述特征,上述简要概括的本发明的更具体描述都可以参照实施例来获得,部分实施例在附图中示出。然而,应注意的是,附图仅示出了本发明的典型实施例,因此不应认为是对本发明的范围的限制,因为本发明可以承认其他等效的实施例。
[0011]图1是配置为实现本发明的一个或多个实施例的计算环境;
[0012]图2示出了根据本发明的一个实施例的与图1的应用相关的事件响应层级;
[0013]图3是根据本发明的一个实施例的图1的执行空间和存储空间的更详细的图;
[0014]图4是根据本发明的另一个实施例的图1的执行空间和存储空间的更详细的图;
[0015]图5是根据本发明的一个实施例的用于推测性地执行与应用可以发出的事件响应相关的操作的方法步骤的流程图;以及
[0016]图6是根据本发明的一个实施例的图1的应用和推测引擎可以在其内运行的示例性系统。
【具体实施方式】
[0017]在以下描述中,阐述了大量的具体细节以提供对本发明的更彻底的理解。然而,对于本领域技术人员来说显而易见的是,可在没有这些具体细节中的一个或多个的情况下实现本发明。在其他情况下,未描述已知的特征以便避免难以理解本发明。
[0018]图1是配置为实现本发明的一个或多个实施例的计算环境100。如所示,计算环境包括事件驱动应用104、推测引擎106、执行空间108以及存储空间110。
[0019]事件驱动应用104是允许经由对异步引发的事件的响应而执行一系列操作的软件程序。事件驱动应用104可以处理从另一个应用、物理传感器、用户输入等接收到的数据,并且可以将数据输出到终端、到另一个应用、到磁盘等。事件驱动应用104可以是图形应用、诸如AutoCAD的建模应用、字处理应用等。在一个实施例中,用户经由用户输入102与事件驱动应用104交互。用户输入102可以是对处理特定事件响应(诸如,建模应用中的绘图事件响应)的指示。
[0020]事件驱动应用104在执行空间108内运行。通常,事件驱动应用104响应于引发的事件而发出事件响应,并且随后在执行空间108内处理这些事件响应。另外,事件驱动应用104被分配了存储空间110的一部分,以使得在分配给事件驱动应用104的存储空间110的一部分内执行与事件驱动应用104相关的存储器存取操作。
[0021]在一些实施例中,以层级的方式组织与应用相关的事件响应,以使得一旦执行在层级中的一级的特定事件响应,就可以执行在层级中的后一级的任何事件响应。
[0022]推测引擎106预测事件驱动应用104可以发出以待处理的将来事件响应,并且推测性地发出那些事件响应以在执行空间108内进行处理。基于与事件驱动应用104相关联的应用状态来预测事件响应,应用状态尤其指示应用发出以待处理的先前的(一个或多个)事件响应、与事件驱动应用104的当前操作相关联的环境(context)以及在事件驱动应用104运行的同时引发的任何事件。推测引擎106对与事件驱动应用104相关联的应用状态进行评估以识别具有事件驱动应用104下次发出的高可能性的某些事件响应。在一个实施例中,推测引擎106基于与事件驱动应用104先前发出以待执行的事件响应相关的事件响应层级来预测待处理的事件响应。在另一实施例中,该推测基于先前收集的、指示在当前事件响应被发出以待处理之后由事件驱动应用104或者类似应用发出以待处理的特定事件响应的事件响应处理历史来预测待处理的事件响应。
[0023]当发出待处理的预测事件响应时,推测引擎106在分配给事件驱动应用104的执行空间108内克隆(clone)该进程,然后在所克隆的进程内发出预测事件响应。克隆的进程也被分配了存储空间110内的独立存储部分。以下在图3和图4中描述与克隆的进程的执行有关的更多细节。
[0024]在一个实施例中,如果事件驱动应用104下次发出的事件响应与在克隆进程中处理的预测事件响应之一匹配,则推测引擎106选择克隆进程作为主进程。然后,异常终止任何其他克隆进程和执行事件驱动应用104的原始进程。在替选的实施例中,如果事件驱动应用104下次发出的事件响应与在克隆进程中处理的预测事件响应之一匹配,则主进程吸收通过克隆进程进行的存储器和I/O修改。然后,异常终止所有克隆进程。
[0025]图2示出了根据本发明的实施例的与图1的应用相关的事件响应层级。如所示,事件响应A202链接到事件响应B204、事件响应C206、事件响应D208。如果事件驱动应用104发出事件响应A202,则事件驱动应用104下次可以发出事件响应204至208中的任一个,因为那些事件响应处于事件响应层级200中的下一级别。图3和图4示出推测引擎106如何基于事件响应层级200推测性地执行事件响应。
[0026]图3是根据本发明的一个实施例的图1的执行空间108和存储空间110的更详细的图。如所示,执行空间108包括主进程302、克隆进程304、克隆进程306和克隆进程308。同样如所示,存储空间110包括应用存储区域310、克隆存储区域312和克隆I/O缓冲器314。
[0027]在图3的图示中,主进程302是事件驱动应用104发出的事件响应在其内执行的进程,以及应用存储区域310是在分配给事件驱动应用104的存储空间110内的存储部分。在主进程302中正执行的事件响应A202由事件驱动应用104在主进程302内发出以待处理。随后,推测引擎106预测存在事件响应B204、事件响应C206或事件响应D208将下次由事件驱动应用104发出以待处理的高可能性。此外,这样的预测基于与事件驱动应用104以及事件响应层级200相关联的应用状态以及推测引擎106分析的任何其他历史执行信息。
[0028]如本文以上所述的那样,当发出待处理的预测事件响应时,推测引擎106克隆事件驱动应用104在其内正在运行的进程。然后,推测引擎106在克隆的进程内对待处理的预测事件响应进行调度。因此,对于预测事件响应、事件响应B204、事件响应C206或事件响应D208中的每一个,推测引擎106创建主进程302的克隆并且在克隆进程内对待处理的预测事件响应进行调度。克隆进程304是在其内推测引擎106已调度待处理的预测事件响应B204的主进程302的克隆。类似地,克隆进程306和306是在其内推测引擎106分别调度了待处理的预测事件响应C206及预测事件响应D208的主进程的克隆。
[0029]另外,将在存储空间110内的不同克隆存储区域312分配给克隆进程304至308中的每一个。在一个实施例中,克隆进程304至308共享存储在应用存储区域310中的数据,以使得仅要修改的数据(即写入数据)存储在相应的克隆存储区域312中。在另一实施例中,当创建克隆进程时,推测引擎106也克隆应用存储区域310并且将克隆的存储器存储在与克隆进程相对应的克隆存储区域312中。另外,将在存储空间110内的不同的克隆I/O缓冲器314分配给克隆进程304至308中的每一个。通过克隆进程启动的任何I/O操作都未被执行而是缓冲在相应的克隆I/O缓冲器314中。
[0030]在一个实施例中,如果事件驱动应用104下次发出的事件响应与在克隆进程304至308中正执行的预测事件响应之一匹配,则推测引擎106选择与匹配的事件响应相关联的克隆进程作为主进程。然后异常终止任何其他克隆进程和执行事件驱动应用104的原始进程,并且将与所选择的克隆进程相关的数据提交到磁盘(未示出)。在替选的实施例中,如果事件驱动应用104下次发出的事件响应与在克隆进程304至308中正处理的预测事件响应之一匹配,则主进程吸收通过克隆进程进行的存储器和I/O修改。然后,异常终止克隆进程304至308。
[0031]在克隆进程304至308共享存储在应用存储区域310中的数据以使得仅写入数据存储在相应的克隆存储区域312的实施例中,将应用存储区域310和与所选择的克隆进程相对应的克隆存储区域312结合以产生分配给新的主进程的存储区域。另外,执行分配给所选择的克隆进程的I/O缓冲器314中所缓冲的I/O操作。这些I/O操作包括对磁盘的操作、网络操作等。
[0032]图4是根据本发明的另一实施例的图1的执行空间108和存储空间110的更详细的图。如所示,执行空间108包括主虚拟机(VM)402、克隆虚拟机404、克隆虚拟机406和克隆虚拟机408。VM402至408中的每一个都是虚拟机进程。同样如所示,存储空间110包括主VM存储区域410、克隆VM存储区域412和克隆I/O缓冲器414。
[0033]在图4示出的实施例中,事件驱动应用104发出的事件响应在主VM402内运行,其中存储空间Iio内的主VM存储区域410被分配给主VM402。当发出待处理的预测事件响应时,推测引擎106创建主VM402的克隆(诸如,克隆VM404),并且向克隆VM发出预测事件响应以进行处理。克隆VM404至408均被分配了存储空间110内的不同的克隆VM存储区域412。在一个实施例中,克隆VM404至408共享存储在VM存储区域410中的数据,以使得仅要修改的数据(即写入数据)存储在相应的VM存储区域412中。在另一个实施例中,当创建克隆进程时,推测引擎106还克隆VM存储区域410并将克隆的存储器存储在与克隆进程相对应的VM存储区域412中。另外,将存储空间110内的不同的克隆I/O缓冲器414分配给克隆进程404至408中的每一个。通过克隆进程启动的任何I/O操作并未被执行而是缓冲在相应的克隆I/O缓冲器414中。
[0034]在一个实施例中,如果事件驱动应用104下次发出的事件响应与在克隆VM404至408中正执行的预测事件响应之一匹配,则推测引擎106选择与匹配的事件响应相关联的克隆VM作为主VM。然后异常终止任何其他克隆VM和执行事件驱动应用104的原始主VM402,并且提交与所选择的克隆VM相关的数据。另外,执行分配给所选择的克隆VM的I/O缓冲器414中所缓冲的I/O操作。这些I/O操作包括对磁盘的操作、网络操作、与诸如通用串行总线(USB)端口等外部端口相关的任何操作。
[0035]在替选的实施例中,如果事件驱动应用104下次发出的事件响应与在克隆VM404至408中正处理的预测事件响应之一匹配,则主VM402吸收由所选择的克隆VM进行的存储器修改。另外,执行分配给所选择的克隆VM的I/O缓冲器414中所缓冲的I/O操作。然后,异常终止克隆VM404至408。
[0036]重要的是,图3和图4中所描述的实施例提供了两种不同级别的封装。图3中的实施例具有通过多个进程克隆存储空间和I/O子系统的能力。图4中的实施例具有克隆整个系统的能力,从而为可能影响系统中的除了存储器和磁盘外的附加部件的性能的事件响应提供推测。
[0037]图5是根据本发明的一个实施例的用于推测性地执行与应用可以发出的事件响应相关的操作的方法步骤的流程图。尽管结合图1至图4的系统描述了方法步骤,但是本领域技术人员将理解,以任何顺序配置为执行这些方法步骤的任何系统都在本发明的范围内。
[0038]方法500开始于步骤502,在步骤502中,推测引擎106基于与事件驱动应用104相关联的当前应用状态来识别事件驱动应用104下次可以发出以待处理的一个或多个事件响应。如本文中先前所述的,可以基于事件驱动应用104发出的最近事件响应、在执行事件驱动应用104期间引发的任何事件、先前捕获的事件响应执行历史等来识别一个或多个事件响应。
[0039]在步骤504中,对于所识别的每个事件响应,推测引擎106创建与事件驱动应用104发出的事件响应在其内运行的主进程不同的克隆进程。然后,在相应的克隆进程内调度所识别的每个事件响应来进行处理。在一个实施例中,克隆进程是进程,而在另一实施例中,克隆进程是虚拟机。
[0040]在步骤506中,推测引擎106确定事件驱动应用104发出的待处理的下一事件响应与在步骤502中识别的事件响应之一匹配。在步骤508中,推测引擎106然后选择下一事件响应被抢先调度以待处理的进程作为主进程。在步骤510中,推测引擎106异常终止任何其余的克隆进程和原始的主进程。
[0041]在一个实施例中,将本文描述的推测执行技术应用于执行“取消”操作。不同的克隆进程可以存储应用的先前状态,并且当发出取消事件时,可以选择存储应用的先前状态的克隆进程作为主进程。
[0042]图6是根据本发明的一个实施例的图1的事件驱动应用104和推测引擎106可以运行的示例性系统。如所示,系统600包括系统存储器602、外部存储器604、中央处理单元(CPU) 606、输入装置610和显示装置612。
[0043]系统存储器602包括本文先前描述的事件驱动应用104。系统存储器602是临时存储在任何指定时间在系统600内运行的软件程序的存储空间,通常是随机存取存储器(RAM)。CPU606执行所存储的与计算机系统600中的各种元件相关联的和/或从计算机系统600中的各种元件传送的一系列指令。外部存储器604是用于存储与事件驱动应用104相关联的数据的存储装置,例如硬盘。输入装置610是允许用户操作事件驱动应用104的各方面并且将输入传送到事件驱动应用104的终端用户控制的输入装置(例如,鼠标或者键盘),诸如用户输入102。显示装置612可以是阴极射线管(CRT)、液晶显示器(IXD)或者任何其他类型的显示装置。
[0044]有利地,通过推测性地发出待处理的事件响应,本文所描述的技术减少了处理事件响应的总等待时间。如果已推测性地处理下次选择的待处理的事件响应,则不再需要后续处理。另外,甚至未被构建为支持推测性执行的应用也可以以考虑事件响应的推测性发出的方式来执行。换句话说,本文所描述的技术可以追溯地应用于现有的事件驱动应用,从而避免对现有应用的数据模型进行重构以支持推测性执行的耗时要求。
[0045]本发明的一个实施例可以被实现为供计算机系统使用的程序产品。程序产品的程序限定了实施例(包括本文描述的方法)的功能并且可以包含在各种计算机可读存储介质中。说明性的计算机可读存储介质包括但不限于:(i)永久存储信息的不可写的存储介质(例如,计算机内的只读存储装置,诸如CD-ROM(只读光盘存储器)驱动器可读取的CD-ROM、闪速存储器、ROM芯片或者任何类型的固态非易失性半导体存储器);以及(ii)存储有可改变的信息的可写存储介质(例如,在软盘驱动器或硬盘驱动器内的软盘或者任何类型的固态随机存取半导体存储器)。
[0046]以上参照具体实施例描述了本发明。然而,本领域技术人员将理解,可以在不背离所附权利要求中陈述的本发明的更广精神和范围的情况下对本发明进行各种修改和改变。相应地,应以说明性的意义而非限制性的意义来看待以上描述和附图。
【权利要求】
1.一种用于对应用事件响应进行推测性处理的计算机实现的方法,所述方法包括: 识别在计算装置上运行的主进程正执行的应用能够发出以待处理的一个或多个事件响应; 对于每个事件响应,生成子进程以处理所述事件响应; 确定包括在所述一个或多个事件响应中的第一事件响应已由所述应用发出以待处理; 提交与所述第一事件响应相关联的子进程;以及 异常终止不同于与所述第一事件响应相关联的子进程的所有子进程。
2.根据权利要求1所述的方法,其中,基于包括所述应用先前发出的当前事件响应的应用处理状态来识别所述一个或多个事件响应。
3.根据权利要求2所述的方法,其中,识别所述一个或多个事件响应包括:识别与所述当前事件响应相关的至少一个事件响应。
4.根据权利要求2所述的方法,其中,识别所述一个或多个事件响应包括:识别所述应用先前发出以待执行的在所述当前事件响应之后的至少一个事件响应。
5.根据权利要求1所述的方法,其中,基于包括在执行所述应用期间引发的事件的应用处理状态来识别所述一个或多个事件响应。
6.根据权利要求1所述的方法,其中,对于每个事件响应,生成所述子进程包括:克隆所述主进程以及在所述子进程内对待执行的事件响应进行调度。
7.根据权利要求1所述的方法,其中,所述主进程被配置为对第一存储部分进行存取,而与所述第一事件响应相关联的子进程被配置为访问第二存储部分,以及提交与所述第一事件响应相关联的子进程包括将所述第一存储部分与所述第二存储部分进行结合。
8.根据权利要求1所述的方法,其中,提交与所述第一事件响应相关联的子进程包括:将与所述第一事件响应相关联的子进程吸收到所述主进程中。
9.根据权利要求1所述的方法,其中,提交与所述第一事件响应相关联的子进程包括:终止所述主进程并且提交与所述第一事件响应相关联的子进程作为所述主进程。
10.根据权利要求1所述的方法,其中,所述主进程包括第一虚拟机,而与所述第一事件响应相关联的子进程包括第二虚拟机。
11.一种用于存储指令的计算机可读介质,所述指令在由处理器执行时使得所述处理器对应用事件响应进行推测性处理,所述方法包括: 识别在计算装置上执行的主进程正执行的应用能够发出以待处理的一个或多个事件响应; 对于每个事件响应,生成子进程以处理所述事件响应; 确定包括在所述一个或多个事件响应中的第一事件响应已由所述应用发出以待处理; 提交与所述第一事件响应相关联的子进程;以及 异常终止不同于与所述第一事件响应相关联的子进程的所有子进程。
12.根据权利要求11所述的计算机可读介质,其中,基于包括所述应用先前发出的当前事件响应的应用处理状态来识别所述一个或多个事件响应。
13.根据权利要求12所述的计算机可读介质,其中,识别所述一个或多个事件响应包括:识别与所述当前事件响应相关的至少一个事件响应。
14.根据权利要求12所述的计算机可读介质,其中,识别所述一个或多个事件响应包括:识别所述应用先前发出以待执行的在所述当前事件响应之后的至少一个事件响应。
15.根据权利要求11所述的计算机可读介质,其中,基于包括在执行所述应用期间引发的事件的应用处理状态来识别所述一个或多个事件响应。
16.根据权利要求11所述的计算机可读介质,其中,对于每个事件响应,生成所述子进程包括:克隆所述主进程以及在所述子进程内对待执行的事件响应进行调度。
17.根据权利要求11所述的计算机可读介质,其中,所述主进程被配置为对第一存储部分进行存取,而与所述第一事件响应相关联的子进程被配置为对第二存储部分进行存取,以及提交与所述第一事件响应相关联的子进程包括将所述第一存储部分与所述第二存储部分进行结合。
18.根据权利要求11所述的计算机可读介质,其中,提交与所述第一事件响应相关联的子进程 包括:将与所述第一事件响应相关联的子进程吸收到所述主进程中。
19.根据权利要求11所述的计算机可读介质,其中,提交与所述第一事件响应相关联的子进程包括:终止所述主进程并且提交与所述第一事件响应相关联的子进程作为所述主进程。
20.一种计算机系统,包括: 存储器;以及 处理器,所述处理器配置为: 识别在计算装置上运行的主进程正执行的应用能够发出以待处理的一个或多个事件响应; 对于每个事件响应,生成子进程以处理所述事件响应; 确定包括在所述一个或多个事件响应中的第一事件响应已由所述应用发出以待处理; 提交与所述第一事件响应相关联的子进程;以及 异常终止不同于与所述第一事件响应相关联的子进程的所有子进程。
【文档编号】G06F9/46GK104011682SQ201280057785
【公开日】2014年8月27日 申请日期:2012年10月25日 优先权日:2011年10月26日
【发明者】弗朗切斯科·约里奥 申请人:欧特克公司