负载平衡的制作方法

文档序号:6569285阅读:118来源:国知局
专利名称:负载平衡的制作方法
负载平衡 背景
托管执行环境中的存储器管理可以包括在清扫或扫描存储器堆的期间 临时挂起托管线程。然而,托管线程的延长挂起会使对应的应用程序的执 行超时。
概述
对在托管执行环境中的应用程序、程序、方法、函数、或其它的代码集合 体的部分的执行至少受存储器管理实现的潜在大小的影响。
附图简述
现根据以下的附图描述托管执行环境中的负载平衡。
图l显示通过网络通信的设备,其中这些设备实现用于负载平衡的示例技术。
图2显示用于实现负载平衡的示例技术的执行环境的示例。
图3显示根据负载平衡的示例实现的数据节点之间的示例数据流。
图4显示根据负载平衡的示例实现的示例处理流。
详细描述
此处描述负载平衡。更具体而言,本描述涉及基于至少关于在相应的执行 环境中的存储器管理实现的潜在大小的数据来控制应用程序、程序、方法、函 数、或其它的代码集合体(assemblage)中的至少数部分的某些行为。
在该详细描述的上下文中,并根据面向对象的编程,方法可被视为对象所 执行的处理。因此,例如,当消息被发送到对象时,该方法被实现。
此处描述的"进程"可表示与应用程序、程序、函数、或其它可编程或可 执行代码的集合体有关的模块或代码程序集的实际运行。此处描述的"程序集"可表示代码的部署单元,其可以或不能版本化。 此处描述的"资源"可包括与给定计算环境相关联的物理资源和逻辑资源 两者。作为非限制性示例,该资源的范围可以从文件到端口到共享状态;艮P,
可被一个以上的可执行实体共享的任何不可执行的实体。
此处描述的"线程"可表示应用程序、程序、函数、或其它可编程或可执 行代码的集合体内的执行路径。线程使得可执行指令的模块的多条执行路径或 流在同一个应用程序、程序、函数、或其它可编程和可执行代码的集合体内并 发地出现;这样,在每个流内,可处理不同的事务或消息。其中可执行多线程 进程的多任务或多处理环境可在托管执行环境中或非托管执行环境中的任一 个中被发现。
此处描述的"隔离边界(isolation boundary)"可表示可用作隔离单元的 逻辑或物理构造。进程是隔离边界的一个示例。在托管执行环境中,这样的隔 离边界可被称作应用程序域,该应用程序域可包括多个执行的线程。此术语仅 作为示例提供。即,此处描述的示例实现不限于上述的应用程序域或甚至不限 于托管执行环境,而是可以被应用于其它执行环境中的各种其它隔离边界实现 中。更具体地,与此处描述的资源分配的范围有关的隔离边界还可涉及机器边 界、进程边界、线程、以及类或程序集边界。甚至更具体地,资源分配的范围 可涉及公有/私有展示、程序集、或类。此外,资源分配可具有多个轴(axis) 或注解,包括,例如,资源的类型以及资源的可见性。
隔离边界可以使要在那里执行的代码从指定源中加载;隔离边界可以独立 于其它这样的隔离边界而被中止;并且隔离边界内的处理可以被隔离以便在其 中发生的错误不影响进程中的其它隔离边界。更具体地,隔离边界可隔离其中 资源的消耗,以致其它隔离边界或者看不见资源的任何变化、或者只能以串行 的、原子的方式看见资源。


图1示出具有处理结点的示例网络环境100,这些处理结点可以按任何数 量及其组合互相通信来实现负载平衡的一个或多个示例。然而,负载平衡的实 现不限于网络环境中的节点。此外,在图1的示例网络环境中,客户机设备105、 服务器设备110A和110B以及"其它"设备115可以通过网络125通信地互 相耦合;并且,此外,客户机设备105、服务器设备110A和110B、和"其它"设备115中的至少一个能够实现此处所描述的负载平衡120。
客户机设备105可以是包括台式个人计算机(PC)、工作站、大型计算机、 因特网设备、以及机顶盒等各种常规计算机设备中的至少一个。此外,客户机 设备105可以是能够通过有线和/或无线链路与网络125相关联的任何设备中的 至少一个,这些设备包括个人数字助理(PDA)、膝上型计算机、蜂窝电话等 等。此外,客户机设备105可以按各种数量和/或其组合来表示上述客户机设备。 "其它"设备115还可以由客户机设备105的上述任何一个示例来体现。
服务器设备110A和110B可根据负载平衡120的至少一个实现向客户机 设备105或"其它"设备115提供各种数据和/或功能中的任何一种。数据可以 是公共可获得的或者是受限制的,例如,仅限于某些用户或只有付了适当的订 阅费或许可费时才可用。服务器设备110A和110B的任何一个可以是各种数 量的网络服务器、应用程序服务器、或刀片服务器及其各种组合。通常,服务 器设备110A和110B用作内容源,而客户机设备105或者通过网络125或者 以离线方式接收这样的内容。然而,根据此处描述的示例实现,客户机设备105 和服务器设备110A与110B可互换地成为网络环境100中的发送节点或接收 节点。此外,根据负载平衡120的至少一个示例,服务器设备110A和110B 可被实现为网络125上的众多服务器设备中的一个。这样的配置可以被非正式 地视为"服务器农场(server farm)"。在这样一个服务器农场中,两个或更 多联网的服务器可在执行同一个应用程序、程序、功能、或其它可编程和可执 行代码的集合体中的至少数部分时共享。此外,"其它"设备115还可以由服 务器设备110A和110B的上述任何一个示例来体现。
"其它"设备115可以是根据此处描述的一个或多个示例的能够实现负载 平衡120的任何另外的设备。即,"其它"设备115可以是能够实现用于在至 少一个托管执行环境中的应用程序、程序、功能、或其它可编程和可执行代码 的集合体的至少一部分的负载平衡120的启用软件的计算或处理设备。更具体 地,"其它"设备115可用作负载平衡器。作为负载平衡器,"其它"设备115 可被实现为物理上与客户机设备105或服务器设备110A和110B中的任一个 分开的硬件设备;或者,"其它"设备115可以被实现为在客户机设备105或 服务器设备110A和110B中的至少一个上的固件或软件。因此,"其它"设备115可以是其上实现了操作系统、解释器、转换器、编译器、或运行时执行
环境中的任何一个的计算、处理、或服务器设备。这些示例并不意在以任何方 式为限制性的,并且因此,不应该以那种方式来解释。
网络125可以表示包括有线和/或无线网络等各种常规网络拓扑和类型中 的任何一种。网络125还可采用包括公共和/或专有协议等各种常规网络协议中 的任何一种。网络125可包括(例如)因特网以及诸如802.11系统等一个或多 个局域网(也被个别地称为LAN)中的至少数部分;诸如蓝牙等个人局域网 (即,PAN)。
设备105、 110A、 110B及115中的至少一个设备中的计算机体系结构典 型地按照硬件与软件来定义计算平台。用于计算设备的软件基于功能被归类成 组,这些组包括硬件抽象层(或者称为"HAL")、操作系统(或者称为"OS") 以及应用程序。
运行时执行环境可表示在OS和应用程序之间的隔离空间,在该空间中, 应用程序可在处理设备105、 一个或多个服务器设备110A和110B、或其它设 备115中的至少一个上执行具体任务。更具体地,运行时执行环境意在通过向 在包括服务器、台式计算机、膝上型计算机、移动处理设备、机顶盒以及游戏 控制台等范围不断增加的处理设备上运行的应用程序提供抽象层和服务并进 一步向该应用程序提供包括存储器管理及其配置的能力来提高在这些处理设 备上执行应用程序的可靠性。
运行时执行环境可用作应用程序编程平台以及应用程序执行平台中的至
作为应用程序编程平台,运行时执行环境可将以多种计算语言中的一种编 写的目标应用程序编译为中间语言(下文称"IL" ) 。 IL通常独立于平台并且 中央处理单元(下文称"CPU")执行IL。事实上,IL是比许多CPU机器语
言更高级的语言。
作为应用程序执行平台,运行时执行环境可将己编译的IL解释成本机机 器指令。运行时执行环境可以或者采用解释器或者采用"即时(just-in-time)" (下文称JIT)编译器来执行这样的指令。或者,运行时执行环境可执行、读 取、解释或以其它方式分析以IL格式而不是本机平台执行格式分配到运行时执行环境中的并已被编译为程序集、方法或类型中的任何一种的中间语言代码
(即,"IL")。此IL的源可被置于非托管执行环境中或在设备105、 110和 115中的相同或单独的一个设备上的运行时执行环境的单独实现中。该源可在 或先于与该IL对应的应用程序、程序、方法、函数或其它可编程和可执行代 码的集合体的安装时间部署IL。
不管怎样,接着,本机机器指令可被CPU直接执行。由于IL是独立于 CPU的,因此只要在那个CPU平台上运行的OS主宿适当的运行时执行环境, IL即可在该CPU平台上执行。负载平衡120所涉及的运行时环境的示例包括 Visual Basic运行时环境;用于运行例如^¥& 例程的Java 虚拟机运行时环境; 或在执行一调用例程之前将例如Microsoft .NetTM应用程序编译成机器语言的 公共语言运行库(CLR)环境。然而,这个列表只是提供示例而已。示例实现 不仅仅限于这些托管执行环境。此外,由于可在测试环境和/或非托管执行环境 内实现一个或多个示例,因此示例实现不仅限于托管执行环境。
被编译为IL的应用程序可被称为"托管代码",由此,运行时执行环境 也可被称为"托管执行环境"。托管代码的各部分可被称为"托管映像"。不 采用运行时执行环境来执行的代码可被称为本机代码应用程序。
图2显示了其中可实现负载平衡120 (见图1)的示例的运行时执行环境 200的示例。
根据至少一个示例实现,运行时执行环境200可帮助用于计算机设备平台 的托管代码的执行。托管代码可被认为是一组核心应用程序开发技术的一部 分,并且还可被视为为在运行时执行环境200上执行而被编译以便向计算设备 平台提供对应的服务的代码。另外,运行时执行环境200可将解释级的托管代 码翻译成可被代理并随后由处理器执行的指令。用于运行时执行环将200的框 架还可提供被视为用于托管应用程序的软件构件块(software building block) 的类库。
根据进一步的示例实现,运行时执行环境200可提供原本期望从内核获得 的至少部分功能,取决于设备105、 110A、 IIOB和115中的任何一个特定设 备的资源限制,计算设备可能有或没有该至少部分功能。因此,运行时执行环 境200的至少一个示例可实现以下输入/输出(下文称"I/O")例程管、存储器管理、主管(administration)、以及服务例程管理。因此,运行时执行环 境200可包括I/O组件205、至少一个存储器管理器210、主管器215 (administrator)、以及执行组件220。这些组件仅作为示例提供,并且将在下 面进一步详细描述;S卩,并不意在将这些示例限于任何特定实现,并且不应该 作这样的推断。此外,可以在运行时执行环境200的示例的各种组合及其配置
中实现该组件。
运行时执行环境200的I/O组件205可提供对与计算设备平台相关联的数 据源(即,处理器和外围设备)的异步访问。这样的数据源的示例可以是如前 面图1所述的设备105、 IIOA、 110B以及115中的一个或多个。更具体地,I/O 组件205可以为运行时执行环境200提供稳健的系统吞吐量并且进一步使得对 I/O请求从其中生成的代码的执行流线化。
存储器管理器210可表示在运行时执行环境200内或与运行时执行环境 200相关联的被称为"无用信息收集器"的模块。无用信息收集(或者下文称 为"GC")可被视为托管代码执行环境的一个稳健特征,通过无用信息收集, 如果经对存储器堆的清扫或扫描发现一个对象不再被任何应用程序使用,则该 对象被释放(即解除分配)。在存储器管理器210的至少一个示例中,空闲存 储器堆的清扫可被实现为一线性搜索。这一实现会非常适用于其存储器大小受 到约束并且相应设备的用户可察觉到清扫完成的延迟的计算设备平台的一个 示例。
存储器管理器210的一个示例可实现"并发GC"功能以便允许托管线程 在存储器堆的清扫或扫描期间继续运行。即,在解除分配期间,并发GC可允 许并行地继续分配。并发GC功能(或者此处称为"并发GC")适用于基于 互动或GUI (图形用户界面)的应用程序。
然而,尽管负载平衡120可能与并发GC功能有关,但本负载平衡120的 示例实现在非并发GC功能的上下文中描述,通过非并发GC功能, 一个或多 个托管线程会在存储器堆的清扫或扫描期间内被挂起。
由存储器管理器210实现的进一步功能可包括在计算设备平台上运行的 各任务中,管理有限易失性RAM (即,存储器堆)存储的一个或多个邻接块 或存储器的一组邻接块;向在该计算设备平台上运行的至少一个应用程序分配存储器;根据应用程序中的至少一个的请求释放存储器的至少数部分;以及防
止任何应用程序入侵性地访问已经被分配给任何其它应用程序的存储器空间。
主管器215可表示运行时执行环境,20|内或与该运行时执行环境相关联的 用来接收应用程序、程序、方法、函数、或其它可编程和可执行代码的集合体 中的至少一部分以便在运行时执行环境200中执行的模块。此外,根据负载平 衡120的至少一个示例实现,主管器215可与存储器管理器210相协调以便在 应用程序执行期间在编译时、初始运行时、或在其之后的任何时刻控制运行时 执行环境一ol内的应用程序、程序、方法、函数、或其它可编程和可执行代码 的集合体的行为。
执行组件220可表示运行时执行环境200内或与运行时执行环境相关联的 用来使托管代码能在计算设备平台上执行的模块。执行组件220可被视为在其 中实现应用程序代码的执行以及提供运行时服务(例如,设备访问和存储器管 理)的环境。
图3示出根据负载平衡120 (见图1)的示例实现的示例数据流300。现参 照图1至图2的特征来描述示例数据流300,然而这样的实现仅作为示例被提 供并且并不意在以任何限制的方式来解释。
至少根据上面提供的"隔离边界"的描述,进程305A、 305B和305C可 被视为逻辑或物理构造。因此,根据负载平衡120的各种实现,进程305A、 305B和305C可涉及机器边界、进程边界、线程、应用程序域、以及类或程序 集边界。此外,负载平衡120的实现绝不限于仅用于描述目的而在此处示出和 描述的这三种构造(即,305A、 305B和305C)。
作为示例,进程305A、 305B和305C可涉及多个服务器(S卩,机器边界)。 作为硬件来实现,服务器305A、 305B和305C可以是至少一个运行时执行环 境200在其上作为应用程序执行平台而运行的独立的硬件设备。作为软件服务 器来实现,进程305A、 305B和305C可以是正被运行时执行环境200的一个 实现执行的公共应用程序、程序、方法、函数、或其它可编程和可执行代码的 集合体的模块化组件。
源自进程305A、 305B和305C中的任何一个的存储器管理数据310可包 括表示即将到来的存储器堆的清扫或扫描(即,GC)的数据,以便解除分配(即,释放)不再被正被运行时执行环境200的一个实现执行的应用程序、程 序、方法、函数、或其它代码集合体使用的一个或多个对象。
在进程305A、 305B和305C被实现为独立的硬件设备的示例中,存储器 管理数据310可源自在一个或多个这样的设备上运行的运行时执行环境200的 一个实现。在进程305A、 305B和305C被实现为公共应用程序、程序、方法、 函数、或其它可编程和可执行代码的集合体的模块化组件的示例中,存储器管 理数据310可以源自模块化组件在其上正被执行的运行时执行环境200的一个 实现。更具体地,在上述示例中,存储器管理数据310可单个地或经组合地源 自存储器管理器210或主管器模块215。
存储器管理数据310可通过采用与各种系统体系结构的应用程序接口 (API)兼容的一个或多个API来实现事务处理。更具体地,根据负载平衡120 的各种实现,对应于存储器管理数据310的API可以能够启动进程305A、305B 和305C之间的负载平衡(即,跨机器边界、进程边界、线程、应用程序域、 以及类或程序集边界)。如此处所描述的,API可被视为被应用程序、程序、 方法、函数、或其它可编程和可执行代码的集合体使用来指引运行时执行环境 200或甚至是操作系统的过程执行的一个或多个例程。
存储器管理数据310可包括由存储器管理器210或主管器模块215单个地 或组合地实现的一个或多个API。以下所列和所描述的这种API的命名仅出于 描述的目的而被提供,并且作为非限制性的示例来提供。
MaxGenerationNotifier (最大生成通知器)可表示其例示意在提示负载平 衡器315对正被运行时执行环境200的特定实现执行的同一个或另一个应用程 序、程序、方法、函数、或其它代码集合体中的至少一部分进行重新分配的类。 更具体地,当存储器管理器210或主管器215单个地或组合地检测到运行时执 行环境200上的即将到来的GC会一直运行以至引起执行运行时执行环境200 上的同一个或另一个应用程序、程序、方法、函数、或其它代码集合体时的超 时的时候,MaxGenerationNotifier被例示。这样的检测可基于在应用程序、程 序、方法、函数、或其它代码集合体的当前执行期间对阈值量存储器堆的分配。 然后,有效地,MaxGenerationNotifier的例示可向负载平衡器提供运行时执行 环境200的状态的主动通知。更具体地,当存储器管理器210或主管器215或单个地或组合地检测到即 将到来的GC有可能会超过阈值逻辑或物理大小时,MaxGenerationNotifier被 例示。例如,当存储器管理器210或主管器215或者单个地或者组合地检测到 即将到来的GC是一个晚生成(late generation) GC的实例并因此可能清扫或 扫描当前可获得的处理能力所允许的最大量的堆(例如,2GB)时,可例示 MaxGnerationNotifier。结果,由于托管线程在存储器堆的清扫或扫描期间会被 挂起,因此对应用程序、程序、方法、函数、或其它代码集合体的执行会在晚 生成GC完成之前超时。因此,在这一大小的GC开始之前, MaxGenerationNotifier会被例示来通知负载平衡器315至少需要对应用程序、 程序、方法、函数、或其它代码集合体中的至少一部分执行进行重新分配。
当然,2GB堆仅作为晚生成GC的一个示例来描述。可担当用于例示 MaxGenerationNotifier的催化剂的即将到来的GC的大小可基于众多因素而改 变,并且会随处理能力的演变而增大。该因素可与处理器设备的处理能力以及 完成GC的预期时间有关。此外,当编写了该正执行的应用程序、程序、方法、 函数、或其它代码集合体的程序员出于效率和安全考虑中的至少一个目的时, 该程序员的偏好(如向主管器215所指示的)也可启动对MaxGenerationNotifier 的例示。
此外,MaxGenerationNotifier的至少一个替换实现可包括用于重定向正被 运行时执行环境200执行的对应的应用程序、程序、方法、函数、或其它代码 集合体中的至少一部分的执行的一个或多个特定指令。
MaxGenerationCompleteNotifier (最大生成完成通知器)可表示其例示意 在通知负载平衡器315被MaxGenerationNotifier例示的GC已经完成的类。因 此,MaxGenerationCompleteNotifier的例示可用来通知负载平衡器315对正执 行的应用程序、程序、方法、函数、或其它代码集合体中的一个或多个部分的 重新分配在不会不利地影响运行时执行环境200的执行的情况下可停止。更具 体地,当存储器管理器210或主管器215或者单个地或组合地检测到以下的至 少 一 个情况时MaxGenerationNotifier可被例示,这些情况有用作 MaxGenerationNotifier的最新近例示的催化剂的GC完成;自 MaxGeneratationMotifier的例示开始过了一个预定的时间阈值;或者为当前正执行的应用程序、程序、方法、函数、或其它代码集合体执行了另一编程模块 代码。
负载平衡器315可表示物理上与客户机设备105分开的硬件设备,或作为 客户机105或服务器设备IIOA和110B中的至少一个上的固件或软件组件。
当例示MaxGenerationNotifier时,负载平衡器315可以重新分配对当前正 执行的应用程序、程序、方法、函数、或其它代码集合体中的至少数部分的处 理以便避免在GC期间的超时。例如,当接收包括表示进程305A上的即将到 来的GC的MaxGenerationNotifier的例示的存储器管理数据310时,负载平衡 器315可以接收执行同一个或另一个当前正执行的应用程序、程序、方法、函 数、或其它代码集合体中的数部分的一个或多个请求,并将该执行重定向至进 程305B和进程305C中的至少一个。
当例示MaxGenerationCompleteNotifier时,负载平衡器315可停止将当前 正执行的应用程序、程序、方法、函数、或其它代码集合体的处理重新分配给 进程305B和305C。因此,负载平衡器315可拥有在进程305A上执行当前正 执行的应用程序、程序、方法、函数、或其它代码集合体的选项。
数据流300的至少一个替换实现不包括负载平衡器315。 B卩,这个替换实 现通过拥有进程305A、 305B和305C来实现负载平衡。
图4显示对应于负载平衡120 (见图1)的至少一个示例实现的示例处理 流400。示例处理流400参考图1-3的特征在下文中描述,然而此实现仅作为 示例而提供并且并不意在以任何限制方式来解释。
框405可表示单个地或以各种组合共同地被实现为进程305A、过程305B、 或过程305C的一部分的应用程序、程序、方法、函数、或其它代码集合体中 的至少一部分的执行。尽管负载平衡120并不如此受限制,但框405可表示在 托管执行环境(即,运行时执行环境200)中的执行。
框410可表示存储器管理器210或主管器215或者单个地或者组合地确定 在当前正执行的应用程序、程序、方法、函数、或其它代码集合体的执行期间 已经分配了阈值量的堆,并且由此GC即将到来。或者,框410可表示存储器 管理器210或主管器215或者单个地或者组合地检査编程代码的至少一部分来 确定对运行时执行环境200在其上运行的处理设备的存储器堆的清扫或扫描即将到来。
判决框415可表示存储器管理器210或主管器215或者单个地或者组合地 相对于预定阈值评估预期GC实现的大小。该评估被用来确定存储器堆的物理 大小是否超出预定阈值(例如,2GB或更多)以至于将可能使当前正执行的应 用程序、程序、方法、函数、或其它代码集合体的执行超时。根据一个替换例, 可对照避免超时的预定时间阈值来对将预期GC完成的时间做出该评估。根据 另一个示例,该评估甚至可包括检查编程代码的至少一部分来确定即将到来的 GC是否有意作为要重新分配的正执行的应用程序、程序、方法、函数、或其 它代码集合体中的至少数部分的催化剂。
接着否定判决框415,框420A可表示存储器管理器210实现用于进程 305A、 305B、或305C中的一个宿主进程上的正执行的应用程序、程序、方法、 函数、或其它代码集合体的GC。然后,处理流程可返回到框405以继续执行 当前执行的应用程序、程序、方法、函数、或其它代码集合体。
接着肯定判决框415,框425可表示存储器管理器210或主管器215单个 地或组合地通知负载平衡器315该预期GC达到或超过预定阈值。g卩,当确定 预期的GC的逻辑或物理参数将会超过阈值时,管理模块210或主管器215可 单个地或者组合地通知负载平衡器该即将到来的GC有可能会引起当前被执行 的应用程序、程序、方法、函数、或其它代码集合体的超时。甚至更具体地, 管理模块210或主管器215可单个地或组合地例示提供对预期状态的通知的 API (例如,MaxGenerationNotifier)。
在框425的至少一个替换实现中,存储器管理器210或主管器215可单个 地或者组合地提供其它形式的通知。例如,该通知可以是包括调用作为先前向 存储器管理器210或主管器215注册过的进程305A、进程305B、或进程305C 的一部分被执行的应用程序、程序、方法、函数、或其它代码集合体的事件。
该通知事件的一个示例可包括图3中的进程305A、 305B、和305C中的 每一个通过单个或组合的存储器管理器210或主管器215订阅一个或多个存储 器管理事件(例如,MaxGenerationNotifier)。例如,进程305A可实现可在存 储器管理器210或主管器215单个地或组合地发布MaxGenNotifier时被调用的 两个函数。这样的调用的非限制性示例如下(1) GC.MaxGenerationNotifier+=new MaxGenerationNotificationHandler(On—MaxGeneration—Notify 1); P)GC .MaxGenerationNotifier+=new
MaxGenerationNotificationHandler(On—MaxGeneration—Notify2);
其中MaxGeneration—Notify 1和MaxGeneration_Notify2是上述的函数。此外,
函数MaxGeneration—Notify 1和MaxGeneration—Notify2可通知负载平衡器310
订阅的事件。因此,当订阅的事件发生时,负载平衡器315可采取所请求的负
载平衡动作。
框430可表示负载平衡器315在进程305A、 305B、和305C中重新分配 当前被执行的应用程序、程序、方法、函数、或其它代码集合体中的至少数部 分。因此,例如,如果在预期依据宿主进程305A的GC实现时接收到框425 处的通知,框430可表示负载平衡器315接收执行同一个或另一个当前被执行 的应用程序、程序、方法、函数、或其它代码集合体的至少一部分的请求,并 将所请求的执行重定向至进程305B和305C中的至少一个。即,框430可表 示负载平衡器315将当前运行的进程305A中的当前被执行的应用程序、程序、 方法、函数、或其它代码集合体中的至少数部分重新分配至并发运行的进程 305B和305C中的一个。
框420B可表示存储器管理器210实现用于在进程305A、 305B、或305C 中的一个宿主进程上正执行的应用程序、程序、方法、函数、或其它代码集合 体的GC,而相应的应用程序、程序、方法、函数、或其它代码集合体中的至 少数部分正在其它并发运行的进程305A、 305B、和305C上执行。因此,例 如,如果在预期依据宿主进程305A的GC实现时接收到框425处的通知,框 430可表示负载平衡器315将当前被执行的应用程序、程序、方法、函数、或 其它代码集合体中的至少数部分重新分配给进程305B和305C中的至少一个, 并且框420A可表示存储器管理器210在宿主进程305A上实现GC。
框435可表示存储器管理器210或主管器215单个地或者组合地通知负载 平衡器GC已经完成。该通知可包括或不包括用来停止当前负载平衡实现的指 令。甚至更具体地,管理模块219或主管器215可单个地或者组合地例示提供 当前状态的通知的API (例如,MaxGenerationNotifier)。然后,处理流返回到框405以继续执行当前被执行的应用程序、程序、方法、函数、或其它代码 集合体。
类似于框425处的处理,通知事件可包括图3中的迸程305A、 305B、和 305C中的每一个通过单个或组合的存储器管理器210或主管器215订阅一个 或多个存储器管理事件(例如,MaxGenerationCompleteNotifier)。因此,例 如,进程305A可实现可在存储器管理器210或主管器215单个地或组合地发 布MaxGenCompleteNotifier时被调用的两个函数。这样的调用的非限制性示例
如下
(2 ) GC .1^乂061^&廿011(1;011^1616"01^61+=116\^
MaxGenerationCompleteNotificationHandler(On—MaxGenerationComplete一Notify
1) ;
(2)GC.MaxGenerationCompleteNotifier+=new
MaxGenerationCompleteNotificationHandler(On一MaxGenerationComplete一Notify
2) ;
其中MaxGenerationComplete—Notifyl禾卩MaxGenerationComplete一Notify2 是上述的函数。此夕卜,函数 MaxGenerationComplete—Notify 1 和 MaxGenerationComplete—Notify2可通知负载平衡器315订阅的事件。因此,当
订阅的事件发生时,负载平衡器315可根据请求至少暂时停止负载平衡。
关于图1-4的上述描述,对于在运行时执行环境上执行的一个或多个应用 程序的负载平衡可根据与存储器管理数据相关联的数据来实现。然而,此处描 述的示例限制并不局限于仅基于存储器管理数据的负载平衡。相反,通知(即, 通知)可被例示来实现基于众多逻辑和物理准则的负载平衡。
用于上述的示例和实现中的任何一个的计算机环境可包括具有例如一个 或多个处理器或处理单元、系统存储器、耦合各种系统组件的系统总线等计算 设备。
计算设备可包括各种计算机可读介质,包括易失性和非易失性介质、可移 动和不可移动介质两者。系统存储器可包括采用诸如随机存取存储器(RAM) 等易失性存储器和/或诸如只读存储器(ROM)或闪存RAM等非易失性存储 器形式的计算机可读介质。可以意识到,能存储可被计算机访问的数据的其它类型的计算机可读介质,诸如磁带盒或其它磁存储设备、闪存卡、CD-ROM、 数字多功能盘(DVD)或其它光学存储、随机存取存储器(RAM)、只读存 储器(ROM)、电可擦除可编程只读存储器(EEPROM)等,也可被用来实 现示例计算系统和环境。
整篇说明书对"示例"、"替换示例"、"至少一个示例"、"实现"或 "示例实现"的表述表示一个具体描述的特征、结构或特点被包括在本发明的 至少一个实现中。因此,该词语的使用可表示比一个实现多的更多实现。此外, 所描述的特征、结构、或特点可以用任何合适的方式在一个或多个实现中组合。
然而,相关领域的技术人员可认识到,可以不采用一个或多个具体细节或 者采用其它方法、资源、材料等来实践本发明。在另一个示例中,公知的结构、 资源、或操作没有被显示或详细描述仅仅是为了避免混淆本发明的各方面。
尽管示出和描述了本发明的各示例实现和应用,但将理解,本发明并不局 限于上述的精确配置和资源。本领域的技术人员可根据本发明此处所公开的各 个方法和系统的安排、操作以及细节作出各种修改、变化、以及变型,而不背 离如上述以及下面所请求保护的本发明的范围。
权利要求
1.一种方法,包括接收(415)在执行(405)托管执行环境(200)中的应用程序期间存储器分配超过阈值的指示;以及重新分配(430)所述应用程序的至少一部分在隔离边界的执行。
2. 如权利要求1所述的方法,其特征在于,所述方法是根据负载平衡器来 执行的。
3. 如权利要求1所述的方法,其特征在于,所接收到的指示包括为预期的 执行超时做准备的通知。
4. 如权利要求l所述的方法,其特征在于,所接收到的指示包括即将到来 的存储器堆的清扫预期会引起执行超时的通知。
5. 如权利要求1所述的方法,其特征在于,所接收到的指示包括对关于所 述应用程序的执行的状态的预览。
6. 如权利要求l所述的方法,其特征在于,所述接收还包括接收来自与所 述托管执行环境相关联的存储器管理组件中的应用程序编程接口 (API)的例 示。
7. 如权利要求1所述的方法,其特征在于,所述隔离边界可以是机器边界、 进程边界、线程边界、类边界、或程序集边界中的任何一种。
8. 如权利要求1所述的方法,其特征在于,所述重新分配包括重新分配所 述应用程序的至少一部分的执行。
9. 如权利要求1所述的方法,其特征在于,所述重新分配包括重定向在所 述隔离边界执行所述应用程序的至少数部分的请求。
10. 如权利要求1所述的方法,其特征在于,所述重新分配包括将执行所述应用程序的一部分的请求重定向至另一服务器。
11. 至少一种具有当被读取后使得一个或多个处理器执行以下步骤的一个或多个可执行指令的计算机可读介质,所述步骤包括监视(410)执行(405)托管代码期间内的存储器分配; 确定(415)所述存储器分配何时超过阈值;以及 发送(425)所述存储器分配已超过所述阈值的通知。
12. 如权利要求ll所述的至少一种计算机可读介质,其特征在于,所述一 个或多个可执行指令的发送使得所述一个或多个处理器将所述通知发送至一 负载平衡器。
13. 如权利要求11所述的至少一种计算机可读介质,其特征在于,所述一 个或多个可执行指令的发送使得所述一个或多个处理器例示一 API类。
14. 如权利要求11所述的至少一种计算机可读介质,其特征在于,所述通 知包括即将到来的对象解除分配的实现可引起托管代码的执行超时的指示。
15. 如权利要求11所述的至少一种计算机可读介质,其特征在于,所述通 知包括重定向在隔离边界执行所述托管代码的一部分的请求的指令。
16. 如权利要求ll所述的至少一种计算机可读介质,其特征在于,所述通 知包括重定向在机器边界、进程边界、线程边界、类边界、或程序集边界中的 任一种执行所述托管代码的一部分的请求的指令。
17. 如权利要求11所述的至少一种计算机可读介质,其特征在于,所述通 知包括将执行所述托管代码的一部分的请求重定向至另一服务器的指令。
18. —种系统,包括监视(410)执行(405)托管代码期间的存储器分配的管理器(210); 当所监视的分配超过阈值时发送(425)通知的主管器(215);以及 被所述通知提示的、分配(430)所述托管代码的部分以便在隔离边界执 行的组件(315).
19. 如权利要求18所述的系统,其特征在于,所述通知指示即将到来的所 述存储器的扫描将使托管代码的执行超时。
20. 如权利要求18所述的系统,其特征在于,所述隔离边界是机器边界、 进程边界、线程边界、类边界、或程序集边界中的种。
全文摘要
避免在执行托管执行环境中的应用程序期间超时的工作通过监视存储器分配来实现。
文档编号G06F17/00GK101292234SQ200680039145
公开日2008年10月22日 申请日期2006年9月28日 优先权日2005年10月20日
发明者M·Z·史蒂芬斯, P·H·杜斯德 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1