用户指导的部分图形执行的制作方法

文档序号:25212501发布日期:2021-05-28 14:08阅读:43来源:国知局
用户指导的部分图形执行的制作方法

本申请是国际申请号为pct/us2016/046093、国际申请日为2016年08月09日、于2018年02月24日进入中国国家阶段、中国国家申请号为201680049279.x、发明名称为“用户指导的部分图形执行”的发明专利申请的分案申请。



背景技术:

计算机和计算系统几乎影响了现代生活的各个方面。计算机通常涉及工作、休闲、医疗、交通、娱乐、家庭管理等。

对计算机进行编程的一种方法涉及使用图形执行工作流。在图形执行工作流中,创建执行各种功能的图形的功能模块或节点。图形的模块通过边缘彼此耦合。在典型的场景中,数据将通过边缘向下游流动通过图形的模块。因此,上游模块将创建数据,数据然后被传递到下游模块,下游模块可以对数据进行操作以创建新数据,新数据可以进一步被传递到更下游的模块。

当使用图形执行工作流开发应用时,图形的部分可以被修改。为了测试修改后的部分,重新执行图形,使得来自上游模块的数据可以流向图形的修改后的部分。因此,对于图形的相对较小的变化,图形的其他部分的大量执行可以发生以测试小的变化。

本文中要求保护的主题不限于解决任何缺点或仅在诸如上述环境中操作的实施例。相反,仅提供本“背景技术”以说明可以实践本文中描述的一些实施例的一个示例性技术领域。



技术实现要素:

本文中示出的一个实施例包括一种包括用于执行可执行图形的用户选择的部分的动作的方法。该方法包括对于可执行图形,该可执行图形包括可执行模块,标识可执行图形的用户选择的子部分。该方法还包括确定需要来自图形中的上游模块的数据以执行可执行图形的子部分。该方法还包括获取所需要的数据。该方法还包括与可执行图形的其他部分隔离地执行图形的用户选择的子部分。提供本“发明内容”是为了以简化的形式介绍将在以下“具体实施方式”中进一步描述的一些概念。本“发明内容”并不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用作确定所要求保护的主题的范围的辅助手段。

附加的特征和优点将在下面的描述中阐述,并且部分将从描述中变得显而易见,或者可以通过本文中的教导的实践来了解。本发明的特征和优点可以通过在所附权利要求中特别指出的仪器和组合来实现和获取。本发明的特征从下面的描述和所附权利要求书中将变得更加明显,或者可以通过如下所述的本发明的实践来了解。

附图说明

为了描述可以获取上述和其他的优点和特征的方式,上面简要描述的主题的更具体的描述将通过参考在附图中示出的具体实施例来呈现。应当理解,这些附图仅描述了典型的实施例并且因此不被认为是范围方面的限制,实施例将通过使用附图利用附加的特征和细节来描述和解释,在附图中:

图1a示出了图形执行系统;

图1b示出图形执行系统的替代用户界面元素;

图1c示出了用于执行部分图形的附加图形元素的选择;

图1d示出了用户对图形模块的子部分的选择;

图2示出了图形执行系统的用户界面元素;

图3示出了附加用户界面元素;

图4示出了可以在图形用户界面中向用户显示的运行历史;

图5示出了附加用户界面元素;以及

图6示出了执行可执行图形的用户选择的部分的方法;以及

图7示出了可执行图形的用户定义的部分的方法。

具体实施方式

在图形执行工作流中,存在用户可能不希望完全执行图形的情况。本文中的实施例允许用户选择图形的子部分以用于执行。使用相关的高速缓存数据作为输入,使用随机数据作为输入,通过允许用户手动输入数据,通过向用户建议要执行的图形的附加部分,等等,可以使得一个或多个必要的输入状态可用于执行图形的子部分。除了允许图形修改的快速迭代之外,这个方法允许用户故意排除特定模块的执行。例如,如果执行的模块具有用户不希望显示(manifest)的副作用(除非执行整个图形),则用户可以排除这个模块的执行。图形的执行在执行整个用户选择的子图形时停止。因此,可以执行图形的部分而不需要执行整个图形。

存在执行整个图形对于用户来说不理想的各种情况。例如,如果用户正在编辑个体模块,则用户可能希望看到仅对这个模块的输出的变化的效果。这对脚本模块尤其如此。强制用户在其排除故障或在其r、python、sql或其他脚本上进行迭代时执行整个图形可能是过分的。

在另一示例中,用户可能不希望执行特定模块。例如,用户可能不希望在实验结束时执行写入模块。替代地或另外地,用户可能不希望执行实验的长时间运行的模块或分支。替代地或另外地,用户可能不希望执行以下的实验的模块或分支:具有已知错误;是耗时的;不是立即任务所需要的;等等。

在另一示例中,用户可能希望仅执行特定的模块集群。例如,用户可以能够确定图形的逻辑是不正确的,并且在图形的某个区域中输出不如预期的那样。在这种情况下,用户可能希望修复和执行实验的这个块,而不需要执行整个图形,以查看变化是否解决了问题。

在另一示例中,用户可能希望将非确定性模块标记为确定性的。

本文中示出的各种实施例可以促进某些功能。例如,可以实现实施例以切换非确定性模块的确定性行为。可以实现实施例以使用上游的高速缓存的值(或以其他方式获取的值)作为单个模块的输入来执行实验中的单个模块。可以实现实施例以使用上游的高速缓存的值(或以其他方式获取的值)作为输入并且当实验中的一系列模块完成时停止执行来执行实验中的一系列模块。可以实现实施例以标记不要执行的个体模块。可以实现实施例以通过如上所述选择停止点来排除实验的分支的执行。现在说明细节。

用户指导的图形执行使得用户能够选择要执行其实验的哪些部分。当用户在其实验的子集上进行迭代时,当他们不希望执行他们的实验的非确定性部分,当他们希望排除故障模块或具有副作用的模块时,等等,这可能是有用的。

一些实施例可以基于从华盛顿州的雷蒙德市的微软公司可获得的azure机器学习。

下面现在示出用户可能希望仅执行特定模块集群的情况。

现在参考图1a,示出了图形执行系统100。图形执行系统100包括用户界面102。用户界面102可以由用户用来从图形106中选择要执行的一组模块。具体地,系统100包括存储可执行图形的存储装置104。包括各种模块107-1至107-12的图形106可以在用户界面102中绘制。用户可以选择要执行的图形106的子部分108-1。在所示的实施例中,用户通过在子部分108-1中的模块周围拖拽边界框112来“橡皮筋界定(rubber-band)”它们的图形的子部分108-1,包括模块107-9至107-12。

然而,选择要执行的模块可以以多种不同的方式执行。例如,图1b示出了每个模块(本文中统称为107)包括复选框。为了选择要执行的个体模块,可以选择相关联的复选框。

在另一示例中,用户界面102可以允许用户通过修改属性来选择要执行的模块。例如,用户可以右键单击模块,这可能会引起显示属性的选择。这些属性中的一个可能是指示模块应当在部分图形执行场景中执行的“运行”属性。

在另一示例中,用户可以能够使用各种键盘快捷键,诸如使用鼠标或其他指针选择模块,并且然后使用ctrl与箭头键的组合来选择各种模块。

在其他实施例中,用户可以能够使用各种笔和平板计算机选择工具来允许用户选择模块。

在其他实施例中,当使用增强现实投影界面(诸如从华盛顿州的雷蒙德市的微软公司可获得的hololens系统)或者其他界面(诸如从华盛顿州的雷蒙德市的微软公司可获得的kinect界面)时,用户可以能够使用手势来选择模块,诸如触摸板手势或手部手势。

当用户选择一个或多个模块时,用户界面102可以包括允许用户指示应当执行的模块的元素。例如,图2示出了显示在用户界面102中的“运行选择模块”按钮110。当模块被选择时,可以显示按钮110。替代地或另外地,可以显示按钮110,但是变灰直到选择了模块。一旦选择了模块,按钮110可以在用户界面102上变为未变灰,从而允许用户选择按钮110并且引起模块被执行。

当用户选择按钮110时,只有子部分108-1中的所选择的模块将由被配置为执行图形模块的图形执行引擎116运行,但是需要注意,如果所需要的上游数据不能从某个其他来源(诸如高速缓存、用户输入、随机生成的值等)可获得,则可以执行一些上游模块,如下面更详细地示出的。

执行子部分108中的模块所需要的上游数据可以以很多不同的方式获取。例如,在一些实施例中,可以从图形106的先前执行中获取数据。具体地,图形106可以在之前的时间已经被部分地或完全地执行。在这个运行期间生成的数据值可以存储在高速缓存114中。因此,可以使用来自全部或部分图形106的先前执行的、在高速缓存114中可获得的任何所需要的数据。例如,在所示的示例中,可能需要来自模块107-7和107-8的数据值来执行子部分108-1。如果图形106先前已经被执行,则来自这些模块的值可以已经存储在高速缓存114中,并且可以被重新用于执行子部分108-1。

高速缓存114可以是例如具有密钥和对应值的表格。密钥标识模块,并且值标识模块先前在前一次运行中产生的数据值。在一些实施例中,标识模块的密钥可以是为模块生成的校验和值。在一些实施例中,模块的版本被并入到用作密钥的校验和值中。以这种方式,可以标识由适当版本的上游模块生成的值用于在部分图形执行中使用。

这对于确定性数据值工作良好。然而,应当理解,在一些实施例中,由上游图形生成的数据可以是非确定性的。例如,来自上游图形的数据值可以使用随机数或操作来生成。数据值可以基于当前时间,等等。然而,对于部分执行,实施例可以使用高速缓存的数据,但是知道由部分执行产生的任何数据可能不可靠或可能过期。事实上,如下面更详细地示出的,在一些实施例中,当执行部分执行时,来自子部分的下游模块的高速缓存的数据将被标记为“不运行”,并且这些模块的高速缓存的数据可以被无效。

当执行部分图形执行时,可以使用其他方法来获取所需要的上游数据。例如,在一些实施例中,图形执行引擎116可以确定需要来自模块107-7和107-8的上游数据来执行子部分108-1。在一些实施例中,图形执行引擎116可以使用用户界面102提示用户手动输入适当的数据值。在一些实施例中,可以提示用户输入某些类型的值。例如,如果模块107-8通常产生字符串,则可以提示用户输入字符串。如果模块107-8通常产生浮点数,则可以提示用户输入浮点数,等等。在一些实施例中,可以用所建议的数据值来提示用户。这些值可以是预定义的值、随机生成的值、由其他图形产生的高速缓存的值等。

在一些实施例中,图形执行引擎116可以随机生成上游值并且将其自动提供给模块和/或作为建议的值呈现给用户。这些值可以使用模式生成。因此,例如,模式可以指示给定模块产生什么类型的值。当需要值时,可以使用模式随机生成值。因此,例如,如果模式指示模块107-8生成字符串,则当执行可以提供给模块107-11的子部分108-1时,图形执行引擎可以生成随机字符串。

在一些实施例中,当需要来自上游模块的值以执行图形的子部分108-1时,可以使用到值的链接。例如,图形执行引擎116可以具有将图形执行引擎116指导到可以获取样本值的位置的url或其他指针。替代地或另外地,用户界面102可以被用来允许用户指定到值的链接。

在一些实施例中,图形执行引擎116可以向用户标识应当被选择来执行子部分的其他模块。例如,在图1a中,用户选择要执行的子部分108-1。执行引擎116确定对于要执行的这个子部分,还需要执行模块107-1、107-2、107-4、107-6、107-7和107-8。这些可以在用户界面102中被建议给用户,以指导用户也选择这些模块作为部分图形执行的部分。如果用户接受这些建议,则如图1c所示,子部分108-2而不是子部分108-1被选择来执行。以这种方式,将获取来自上游模块的所有值。如果用户选择不选择一个或多个建议的模块,则可以以其他方式获取数据,诸如上面提出的方式。

在一些实施例中,用户可以不被给予是否执行上游模块的选择,相反,如果需要来自任何上游模块的数据,则将执行这些模块。在这种情况下,当用户已经选择子部分108-1来执行时,图形执行引擎116将对于用户潜在地透明地标识和执行子部分108-2中的模块。

实现其中执行模块受用户选择限制的实施例。具体地,如上所述,在部分执行期间不执行用户未选择的非上游模块。当来自上游模块的数据可以在其他情况下被获取时(诸如当来自上游模块的高速缓存的数据从先前的执行中可获得时,当可以使用用户输入数据来代替由上游模块产生的数据时,当可以使用随机数据来代替来自上游模块的数据时,等等),这些模块不需要在部分执行中被执行。替代地,只有产生由用户选择的模块直接或间接需要的数据的这些上游模块才被执行。实现其中用户选择的模块的下游的模块不被执行的实施例。因此,例如,图1d示出了其中由用户选择子部分108-3的示例。这个子部分108-3包括模块107-4、107-6、107-8和107-11。在所示的示例中,模块107-3、107-5、107-7、107-10和107-12不在用户选择的模块的上游,因为它们不产生流向子部分108-3中的用户选择的模块的数据。模块107-1、107-2和107-9是模块108-3的上游模块。在一些实施例中,当子部分108-3被执行时,这些模块也将被执行。然而,在其他实施例中,这些模块的数据将从其他来源获取,如上所述。子部分108-3的执行在模块107-11处停止,使得下游模块(在这种情况下为模块107-12)不被执行。

在图1a-1d所示的示例中,用户界面耦合到实验服务113。实验服务113是驻留在下面描述的用户界面层与作业执行服务115之间的逻辑的服务层。实验服务113可以使用处理器、存储器和存储在存储器中并且由处理器执行的软件,使用固件,使用可编程逻辑器件等来构造。实验服务113基于用户在用户界面102中选择的模块来过滤不应当在部分执行场景中运行的模块。这样的过滤可以过滤没有被用户在用户界面102中选择的任何模块、或者如上所示的没有被用户选择并且不需要作为由用户选择的模块的上游节点的任何模块。作业执行服务115是进行以下操作的逻辑层:取得图形,将其解析成作业(个体步骤),将作业发送到图形执行引擎116,利用结果,并且然后重复下一作业。作业执行服务115和图形执行引擎116可以使用处理器、存储器和存储在存储器上并且由处理器执行的软件,使用固件,使用可编程逻辑器件等来构造。

在一些实施例中,当执行部分运行时,所选择的模块下游的高速缓存的模块数据变为“可疑的”。虽然来自先前运行的高速缓存的数据可以可用,但是它已过期并且可能不正确。为此,在一些实施例中,当启动部分运行时,下游模块将被标记为“未执行”。因此,例如,在图1d所示的示例中,模块107-12将被标记为“未执行”,并且模块107-12的任何高速缓存的数据将不被用于其他部分运行(尽管在这个示例中,这是不相关的,因为模块107-12不在任何其他模块的上游)。

部分运行的另一副作用是它们与实验运行历史的交互。在一些系统中,就运行历史而言,部分运行将不能与整个实验运行区分开来。如果失败,则实施例可以在运行历史中显示“失败”(诸如下面结合图4示出和讨论的运行历史402),如果它通过,则实施例可以在运行历史中显示“完成”等。

在一些实施例中,可以执行单个模块。这在执行脚本模块时可能特别有用。脚本模块(python、r、sql等)通常在正在编写代码时经历若干迭代。当用户正在处理每个迭代时,先前他们需要执行整个图形来验证他们的增量变化是否按预期行事。这是一个耗时的过程,特别是在脚本模块在图形中的深处并且其上游模块由于非确定性而被重新执行的情况下。

本文中的实施例可以允许用户能够对其脚本的变化进行快速迭代,以简单地执行它们正在改变的并且使用高速缓存的上游值或者如上所示的以其他方式获取的值的模块,然后在模块完成之后停止执行。

图3示出了可以用来允许用户使用这个功能的示例用户界面。图3示出了可以显示在用户界面102中的用户界面元素302。在示例性的所示实施例中,将“执行脚本模块”手势放置在用户将要工作的区域附近。在这个示例中,这是用户界面元素302,它是脚本框。“运行模块”按钮304被放置在属性窗格306中在脚本区域308上方。

当用户点击运行按钮304时,如果高速缓存的输入数据从先前的上游执行从高速缓存114可获得,则在一些实施例中,将使用它,而不管任何上游模块的确定性行为。这表示,如果非确定性模块正在馈送脚本模块,并且脚本模块被隔离地执行,则将使用非确定性模块的高速缓存的值而不是重新执行。如果上游的高速缓存的数据丢失,则在执行脚本模块之前将首先执行必要的上游模块。

在隔离地执行模块之后,下游数据以及运行历史变为可疑。为了适应当前行为,解决下游数据的一种方式是将其从高速缓存114中移除。

运行历史可以被更新以示出执行了不完整的通过或失败的实验。这些可以通过简单地将“(部分运行)”附加到状况来示出。例如,图4示出了运行历史402,其示出了可以在用户界面102中向用户显示的部分执行。

在后端,可以以多种方式来实现从用户界面102到图形执行引擎116的通信,该通信描述应当仅执行单个模块。例如,在一个实施例中,实施例可以包括采用描述要执行哪些模块的第二参数的新的图形执行调用。替代地或另外地,实施例可以实现对图形的新的串行化模块字段。每个模块将具有“excludefromexecution(排除执行)”标志,其默认为假。替代地或另外地,实施例可以重新利用用于掩蔽的“掩蔽”模块字段,并且如以上针对“excludefromexecution”字段所述的那样对其执行相同的操作。“掩蔽”是将块注释掉或排除其执行的想法。实施例可以“掩蔽”特定模块并且运行整个实验(即,不仅仅是部分图形运行),但是掩蔽的模块不会执行。

在其中实现对图形的新的串行化模块字段的实施例中,单个模块执行可以经由图形中的串行化模块参数(例如,“excludefromexcution”)从用户界面102传送到实验服务113。单个模块执行相应地翻转这些位,以向实验服务器113传达潜在地只有模块的子部分(在这种情况下是一个)应当被执行。实验服务113代码接受这些标志,以在所提交的作业中仅向作业执行服务115发送模块任务的子部分。因此,实验服务113过滤不应当在部分执行场景中运行的模块。作业执行服务115是进行以下操作的逻辑层:取得图形,将其解析成作业(个体步骤),将作业发送到图形执行引擎116,利用结果,并且然后重复下一作业。

在用户接口侧,当个体模块正在被执行时,被发送到实验服务113用于执行的图形使得除了正在被执行的单个模块之外的“excludefromexecution”字段被翻转为真。“运行模块”按钮304位于脚本模块的属性窗格306中,并且当被点击时将引起图形被转发到图形执行引擎116,诸如通过在图形被更新以指示哪些模块应当被排除在执行之外之后将图形发送到由“运行”方法使用的restapi。

下面现在说明允许用户管理非确定性模块的执行的细节。非确定性模块在不同的运行中将具有不同的输出,即使在不同的运行之间对这些模块的输入是相同的。这可能是由于随机函数、竞态条件、逼近技巧等原因引起的。

在一些图形系统中,存在将在所执行的每个实验上执行的模块(例如,i/o模块),而不管它们正在使用或输出的数据是否已经改变。在本文所示的一些实施例中,如图5所示,将向用户呈现复选框或其他适当的界面,诸如复选框502,诸如在非确定性模块(包括定制模块)的属性窗格中。如果用户选择复选框502,则模块不被重新执行,并且可以使用先前高速缓存的数据。为了保持向后兼容性并且还保留通常被认为是正确的语义,在一些实施例中,这个复选框的默认状态将被取消选中(即,非确定性行为)。

在用户选中这个框,但是模块上的参数值已经改变或者新的数据被馈送到其中的事件中,复选框将不被接受并且模块将重新执行(类似于确定性模块的行为)。另外,如果先前的运行结果对模块不可用,则它也将执行。

在所示的示例中,复选框502被显示为任何非确定性模块的属性窗格506中的最底部参数:

在一些实施例中,暴露以切换确定性的参数将不是传统意义上的模块上的参数。相反,当显示非确定性模块的属性窗格时,用户界面可以自动添加这个参数。这样做是为了确保切换这个参数不会使任何现有的高速缓存失效。用户界面将这个参数的状态作为新的模块字段存储在串行化的实验图形中。当图形被传递到实验服务113用于执行时,实验服务113的行为将被改变以切断(keyoff)这个字段的状态而不是模块本身上的确定性设置。生成的模块任务将适当地设置作业执行服务113的确定性标志。为了作业执行服务113能够接受这个设置,任何高速缓存的数据可用于这个模块。作业执行服务113将在执行之后无条件地存储高速缓存的输出,而不管任务的确定性状态如何。

一些实施例允许用户将模块标记为“不执行”。这具有停止这个特定分支的图形执行的效果。这可以被进行以禁用具有副作用的模块,禁用正在出错的实验的分支,等等。

现在下面的讨论涉及可以执行的很多方法和方法动作。尽管方法动作可以按照某种顺序进行讨论,或者在流程图中被示出为以特定顺序发生,但是除非特别说明或要求,否则不需要特定顺序,或者因为一个动作依赖于在这个动作被执行之前完成的另一动作而需要特定顺序。

现在参考图6,示出了方法600。方法600包括用于执行可执行图形的用户选择的部分的动作。方法600包括对于可执行图形,该可执行图形包括可执行模块,标识可执行图形的用户选择的子部分(动作602)。

方法600还包括确定需要来自图形中的上游模块的数据以执行可执行图形的子部分(动作604)。

方法600还包括获取所需要的数据(动作606)。在一些实施例中,这可以在不执行不需要被执行以获取所需要的数据的任何模块的情况下进行。在一些实施例中,这可以通过不执行用户未选择的任何模块来进行。例如,这些实施例可以使用高速缓存的数据、随机生成的数据和/或用户输入数据。

方法600还包括与可执行图形的其他部分隔离地执行图形的用户选择的子部分(动作608)。在一些实施例中,这包括在图形的用户选择的子部分结束时停止执行。

可以实践方法600,其中获取所需要的数据包括从相关上游模块的一个或多个先前执行获取高速缓存的值。

方法600还可以包括为用户标识需要被执行以获取所需要的数据的至少一部分的附加模块,并且向用户建议用户也选择这些模块。

方法600还可以包括为用户标识需要被执行以获取所需要的数据的至少一部分的附加模块,并且为用户自动选择附加模块。

可以实践方法600,其中获取所需要的数据包括强制从待使用的非确定性模块的一个或多个先前执行获取的高速缓存的值的使用,即使上游模块产生非确定性结果。

可以实践方法600,其中获取所需要的数据包括提示用户标识值。例如,提示用户标识值可以包括提示用户手动输入值。替代地或另外地,提示用户标识值包括提示用户接受建议的输入值。替代地或另外地,提示用户标识值包括提示用户标识指向可以获取值的指针。例如,用户可以提供指向可以获取数据的位置的url或其他指针。

可以实践方法600,其中获取所需要的数据包括使用随机生成的数据。在一些实施例中,随机生成的数据根据模式来生成。

现在参考图7,示出了方法700。方法700包括用于执行可执行图形的用户定义的部分的动作。该方法包括向用户提供可执行图形的图形表示,可执行图形包括可执行模块(动作702)。

方法700还包括从用户接收对可执行图形的子部分的选择(动作704)。

方法700还包括与可执行图形的其他部分隔离地执行图形的用户选择的子部分(动作706)。

方法700还可以包括确定需要来自图形中的上游模块的数据以执行可执行图形的子部分并且获取所需要的数据。在一些这样的实施例中,可以实践方法700,其中获取所需要的数据包括从相关上游模块的一个或多个先前执行获取高速缓存的值。替代地或另外地,获取所需要的数据可以包括在用户界面中提示用户标识值。提示用户标识值可以包括提示用户手动输入值。替代地或另外地,提示用户标识值可以包括提示用户接受建议的输入值。替代地或另外地,提示用户标识值可以包括提示用户标识指向可以获取值的指针。

方法700还可以包括在用户界面中为用户标识需要被执行以获取所需要的数据的至少一部分的附加模块并且向用户建议用户也选择这些模块。

方法700还可以包括在用户界面中为用户标识需要被执行以获取所需要的数据的至少一部分的附加模块,并且为用户自动选择附加模块。

此外,该方法可以由包括一个或多个处理器和诸如计算机存储器等计算机可读介质的计算机系统来实践。具体地,计算机存储器可以存储在由一个或多个处理器执行时引起各种功能(诸如实施例中所述的动作)被执行的计算机可执行指令。

本发明的实施例可以包括或利用包括计算机硬件的专用或通用计算机,如以下更详细地讨论的。在本发明的范围内的实施例还包括用于携带或存储计算机可执行指令和/或数据结构的物理和其他计算机可读介质。这样的计算机可读介质可以是可以被通用或专用计算机系统访问的任何可用介质。存储计算机可执行指令的计算机可读介质是物理存储介质。携带计算机可执行指令的计算机可读介质是传输介质。因此,作为示例而非限制,本发明的实施例可以包括至少两种截然不同的计算机可读介质:物理计算机可读存储介质和传输计算机可读介质。

物理计算机可读存储介质包括ram、rom、eeprom、cd-rom或其他光盘存储装置(诸如cd、dvd等)、磁盘存储装置或其他磁存储设备、或者可以用于以计算机可执行指令或数据结构的形式存储期望的程序代码装置并且可以由通用或专用计算机访问的任何其他介质。

“网络”被定义为能够在计算机系统和/或模块和/或其他电子设备之间传输电子数据的一个或多个数据链路。当通过网络或其他通信连接(硬连线、无线或硬连线或无线的组合)将信息传输或提供给计算机时,计算机将连接正确地视为传输介质。传输介质可以包括可以用于以计算机可执行指令或数据结构的形式携带期望的程序代码装置并且可以被通用或专用计算机访问的网络和/或数据链路。上述的组合也被包括在计算机可读介质的范围内。

此外,在到达各种计算机系统组件时,计算机可执行指令或数据结构形式的程序代码装置可以从传输计算机可读介质自动传输到物理计算机可读存储介质(反之亦然)。例如,通过网络或数据链路接收的计算机可执行指令或数据结构可以缓存在网络接口模块(例如,“nic”)内的ram中,并且然后最终传送到计算机系统ram和/或计算机系统处的较不易失性计算机可读物理存储介质。因此,计算机可读物理存储介质可以被包括在也(甚至主要)利用传输介质的计算机系统组件中。

例如,计算机可执行指令包括引起通用计算机、专用计算机或专用处理设备执行特定功能或功能组的指令和数据。例如,计算机可执行指令可以是二进制文件、诸如汇编语言等中间格式指令、或者甚至源代码。虽然已经用结构特征和/或方法动作专用的语言描述了主题,但是应当理解,所附权利要求中限定的主题不一定限于以上描述的特征或动作。相反,所描述的特征和动作被公开作为实现权利要求的示例形式。

本领域的技术人员将认识到,本发明可以在具有很多类型的计算机系统配置的网络计算环境中实践,包括个人计算机、台式计算机、膝上型计算机、消息处理器、手持设备、多处理器系统、基于微处理器或可编程的消费电子产品、网络pc、小型计算机、大型计算机、移动电话、pda、寻呼机、路由器、交换机等。本发明还可以在分布式系统环境中实践,其中通过网络链接(通过硬连线数据链路、无线数据链路、或通过硬连线和无线数据链路的组合)的本地和远程计算机系统都执行任务。在分布式系统环境中,程序模块可以位于本地和远程存储器存储设备两者中。

替代地或另外地,本文中描述的功能可以至少部分地由一个或多个硬件逻辑组件来执行。例如而非限制,可以使用的说明性类型的硬件逻辑组件包括现场可编程门阵列(fpga)、程序特定的集成电路(asic)、程序特定的标准产品(assp)、片上系统系统(soc)、复杂可编程逻辑器件(cpld)等。

本发明可以在不脱离其精神或特征的情况下以其他具体形式来实施。所描述的实施例在所有方面仅被认为是说明性的而非限制性的。因此,本发明的范围由所附权利要求而不是由前面的描述来指示。在权利要求的等同的含义和范围内的所有变化都将被包括在其范围内。

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