Title:
THROTTLING OUTPUT WITH ONGOING INPUT
Kind Code:
A1


Abstract:
A plurality of communications sent from a sending program can be stored in a queue for the duration of a time period specified by a timer. When the timer expires, a specified program module can be executed that merges the plurality of communications into a single result. The singe result can be sent to a receiving program. Incoming communications are not throttled or delayed.



Inventors:
Desjardins, Patrick (REDMOND, WA, US)
Application Number:
16/293649
Publication Date:
06/27/2019
Filing Date:
03/06/2019
Assignee:
MICROSOFT TECHNOLOGY LICENSING, LLC. (REDMOND, WA, US)
International Classes:
H04L12/823; H04L12/875
View Patent Images:



Primary Examiner:
NGUYEN, QUANG N
Attorney, Agent or Firm:
MICROSOFT CORPORATION (REDMOND, WA, US)
Claims:
What is claimed:

1. A computing device comprising: a processor: a memory connected to the processor; the processor configured to: set a timer; create a queue; receive at least one of a plurality of communications; place a payload associated with the at least one communication into the queue until the timer expires; in response to the timer expiring, process the contents of the queue to generate a single result; generate a single communication comprising the single result.

2. The computing device of claim 1, wherein a method that processes the contents of the queue is specified.

3. The computing device of claim 1, wherein the at least one communication is sent from a first application.

4. The computing device of claim 1, wherein the single communication comprising the single result is sent to a second application.

5. The computing device of claim 1, wherein the data comprises mergeable data.

6. The computing device of claim 1, wherein the data comprises mergeable data comprising click and drag data.

7. The computing device of claim 1, wherein the second application comprises a user interface.

8. A method comprising configuring a processor of a computing device to: set a timer; create a queue; receive at least one communication of a plurality of communications from a first application until the timer expires; store a payload of the at least one communication in the queue; in response to the timer expiring, process contents of the queue; generate a single communication having a payload comprising the result of processing contents of the queue; and send the single communication to a second application.

9. The method of claim 8, wherein the first application is a user interface executing on a client computer.

10. The method of claim 8, wherein the second application executes on a server computer.

11. The method of claim 8, wherein the first application is rendered by a browser using a script file.

12. The method of claim 11, wherein the script file identifies a method that merges the content of the queue.

13. The method of claim 11, wherein the script file specifies the timer.

14. The method of claim 11, wherein the script file identifies a method that sends the generated single result.

15. A computing device comprising: a processor; a memory; the memory connected to the processor; the processor configured to: merge until a timer expires payloads associated with communications received from a sending application to generate a single result, the payloads stored in a queue; and send a single communication comprising the single result to a receiving application.

16. The computing device of claim 15, the processor further configured to: clear the queue after contents of the queue have been processed.

17. The computing device of claim 15, the processor further configured to: reset the timer.

18. The computing device of claim 15, wherein a delay parameter specifies how much time can elapse between receiving a communication and releasing the communication.

19. The computing device of claim 15, wherein a method parameter specifies a method invoked after a delay has occurred.

20. The computing device of claim 15, wherein a method parameter specifies a method invoked to send the single communication.

Description:

CROSS-REFERENCE TO RELATED APPLICATIONS

This application is a continuation of Ser. No. 15/347,950, filed on Nov. 10, 2016, entitled “THROTTLING OUTPUT WITH ONGOING INPUT”, the entirety of which is hereby incorporated by reference.

BACKGROUND

The load on an application can vary over time based on the number of active users or the type of activities that are being performed. Some operations can be time consuming and can slow down the system when executed in high frequency.

In computing, a throttling process is a process that is intended to regulate the rate at which some aspect of application processing proceeds. For example, in online transactional processing, a throttling mechanism may be embedded in the application hosting platform to balance the application's request/response rates to prevent a slowdown or even denial of service scenario because too much input has choked the system.

SUMMARY

The sending of a number of communications can be delayed by caching communication data for a specified time. When the specified delay time period has been reached, the data can be processed so that one result is generated from the multiple communications. A single communication can be generated that includes the result generated from the payloads of the multiple communications. As used herein the “payload” refers to the part of a communication that is the data that is processed, analyzed, merged, aggregated, etc., excluding headers, metadata or any other information included in the communication. A number of payloads can be added to a queue for a specified time. A timer may be set for the specified time. When the specified time has been reached and the timer expires, the data in the queue can be processed. Processing the data can reduce multiple communications to a single communication, so that a single result representing the effect of all the data in the queue can be sent. That is, the data in the queue can be processed to yield a single cumulative or otherwise merged, aggregated or processed result which is representative of all the communications processed.

This Summary is provided to introduce a selection of concepts in a simplified form that are further described below in the Detailed Description. This Summary is not intended to identify key features or essential features of the claimed subject matter, nor is it intended to be used to limit the scope of the claimed subject matter.

BRIEF DESCRIPTION OF THE DRAWINGS

In the drawings:

FIG. 1a illustrates a system 100 comprising an example of a system in which communications are throttled with ongoing input in accordance with aspects of the subject matter described herein;

FIG. 1b illustrates a system 101 comprising another example of a system in which communications are throttled with ongoing input in accordance with aspects of the subject matter described herein;

FIG. 1c illustrates a system 103 comprising another example of a system in which communications are throttled with ongoing input in accordance with aspects of the subject matter described herein;

FIG. 2a illustrates an example of a method 200 for throttling communications with ongoing input in accordance with aspects of the subject matter described herein;

FIG. 2b illustrates an example of a script 220 for throttling communications with ongoing input in accordance with aspects of the subject matter described herein; and

FIG. 3 is a block diagram of an example of a computing environment in accordance with aspects of the subject matter described herein.

DETAILED DESCRIPTION

Overview

Some operations can be time consuming and can slow down response time when executed in high frequency. For example, in a network, certain operations occurring on a client computer can result in sending hundreds of requests to a server within a short period of time (e.g., hundreds of requests/second). This can cause a processing slowdown or worse. In accordance with aspects of the subject matter described herein, the sending of a number of communications across a network can be delayed by caching communication data for a specified time. Meanwhile, incoming communications proceed unchecked. That is, incoming communications are not throttled or delayed. When the specified delay time period has been reached, (e.g., a timer is set for a specified period of time and the specified period of time has elapsed, also referred to as “the timer has expired”) the data can be processed so that one result is generated from a group of communications. For example, all of the data in the queue can result in the generation of a single communication. The single communication can be sent across the network, the single communication including the result generated from the payloads of the multiple communications, thus reducing the number of requests sent to a server significantly (e.g., if 100,000 requests are sent per second and the delay is set to one half second, instead of receiving 100,000 requests per second, 2 requests per second would be received by the server). It will be appreciated that the example provided is meant to be illustrative, not limiting. For example, the queued data may result in the generation of several communications instead of just one, the point being the number of communications that are sent on to a receiver are significantly reduced while incoming communications proceed without interference.

Data from the communication can be placed in a queue. Periodically, based on the timer, the data can be aggregated, merged, accumulated, grouped, analyzed, or otherwise processed to produce a result that encapsulates the meaning of the data. The data in the queue can be processed so that multiple communications are reduced to a single communication comprising a single result of all the data in the queue. That is, the data in the queue or a part of the data in the queue can be processed to yield a single cumulative or otherwise merged, aggregated or processed result. In accordance with some aspects of the subject matter described herein, the communications can be user input to a user interface executing on a single computer. In accordance with some aspects of the subject matter described herein, the communications can be messages or events or any type of information sent between applications on a single computer or between multiple computers connected in a network.

Throttling Output with Ongoing Input

FIG. 1a illustrates a system 100 comprising an example of a system in which communications are throttled with ongoing input in accordance with aspects of the subject matter described herein. All or portions of system 100 may reside on one or more computers or computing devices such as the computers described below with respect to FIG. 3. System 100 or portions thereof may be provided as a stand-alone system or as a plug-in or add-in.

System 100 or portions thereof may include information obtained from a service (e.g., in the cloud) or may operate in a cloud computing environment. A cloud computing environment can be an environment in which computing services are not owned but are provided on demand. For example, information may reside on multiple devices in a networked cloud and/or data can be stored on multiple devices within the cloud. System 100 can be an on-premises automated performance debugging system.

System 100 can include one or more computing devices such as, for example, computing device 102a and/or computing device 103. Contemplated computing devices include but are not limited to desktop computers, tablet computers, laptop computers, notebook computers, personal digital assistants, smart phones, cellular telephones, mobile telephones, sensors, server computers, client computers and so on. A computing device such as computing device 102a can include one or more processors such as processor 142a, etc., and a memory such as memory 144a that communicates with the one or more processors 142a, etc. A computing device such as computing device 103 can include one or more processors such as processor 143, etc., and a memory such as memory 145 that communicates with the one or more processors. Computing device 103 may be a server computer. Computing device 102a may be a client computer.

System 100 may include one or more program modules that when loaded into the memory and accessed by the one or more processors cause the processor to perform the action or actions attributed to the one or more program modules. The processor(s) may be configured to perform the action or actions attributed to the one or more program modules. System 100 may include any one of or any combination of any number of the following: an application such as but not limited to a report generator such as report generator 105 that generates one or more reports such as report 120. System 100 may include any one of or any combination of any number of the following: a browser such as browser 106, a webpage such as webpage 108, a script such as script 110, a timer such as timer 111 and or a throttling program module such as throttler 112. Multiple communications may be received by throttler 112, represented in FIG. 1a by user input 114, 116, etc.

Throttler 112 may include one or more program modules (not shown). For example, one or more program modules of throttler 112 may receive one or more communications. One or more program modules of throttler 112 may extract data (e.g., the payload of the communication) from the one or more communications. One or more program modules of throttler 112 may create a queue such as queue 113 in which to store the data. One or more program modules of throttle 112 may queue the data to be processed in queue 113. One or more program modules of throttle 112 may create and/or set a timer such as timer 111 for a delay. One or more program modules of throttle 112 may specify a program module to execute to process the data in the queue. The specified program module may process the data in the queue 113 to generate a single result, e.g., single communication 118. One or more program modules of throttler 112 may process the data in the queue 113 to generate a single result in response to being triggered by the timer 111. Alternatively, processing may proceed whenever a communication is received and only the result can be stored in the queue. The timer 111 may include comparison logic that compares elapsed time against a specified value, so that processing of the data is triggered when the timer value matches the specified value.

One or more program modules of throttler 112 may generate a single communication comprising the single result. One or more program modules of throttler 112 may send the communication to a recipient. User input such as user input 114, 116, etc. may be received. User input 114, 116, etc. may include information such as the amount of time to wait before processing the data in the queue (e.g., specifying the time period of the timer), specifying the program module to call to process the data in the queue, etc. Alternatively, this information can be provided in the script 110. User input such as user input 114, 116, etc. may include the data that is placed in the queue 113 and processed, merged, aggregated, etc. to generate the single communication 118.

For example, a webpage (e.g., webpage 108) can be downloaded from a server such as computing device 103 to a client such as computing device 102a. A script such as script 110 may execute to make the web page interactive without innumerable downloads from the server. Suppose the webpage allows a user to select a time period for which an animated report is generated. Suppose for example, the report displays a timeline on the x axis and work teams on the y axis. Using a click and drag operation to select a point on the timeline within a particular work team on the y axis can result in an animation being generated which redraws the timeline for that team. Suppose that each time the user moves the cursor in a click or click and drag operation, a communication is generated. Hundreds of communications per second, comprising pairs of co-ordinates may be generated, making the browser execution very slow because the browser has to refresh with each communication, redrawing the timeline for each pair of co-ordinates received.

In accordance with aspects of the subject matter described herein, instead of refreshing the browser with each communication, as described above, a timer can be set, the communications can be queued until the timer expires and a single communication representing the end result can be generated. For example, suppose relative cursor co-ordinates of (−1x, 0y) followed by (−2x, 3y) are received. The result is a final move of −3x and 3y. In this example, a single communication with the co-ordinates (−3x, 3y) can be generated representing the point on the timeline for which the animation is generated. The animation generation may occur on the server. Thus instead of hundreds of communications per second being sent to the server, only a few can be sent, (depending on the time period chosen for the timer). It will be appreciated that the subject matter described herein is not limited to the example presented. The example is meant to be illustrative not limiting. It will be appreciated that the data for which the subject matter described herein is applicable includes any data in which the pathway to the combined value is not necessarily of great value. For example, in a stock market scenario rapid changes in stock prices do not have to be kept track of. Only the price of the stock at the moment of purchase is needed.

FIG. 2b illustrates an example of a script 220. Script 220 is written in TypeScript but it will be appreciated that the script could be written in any suitable markup language or programming language. A particular class (e.g., DelayedQueue<T> 222) can be created that on its creation takes a delay (e.g., private_delayMillisecond: number; 224) and a single method (e.g., private_method: (queueDate: [])=>void 226) as parameters. The class can instantiate an algorithm that processes the queued data. The delay parameter can be used to specify how much time can elapse between receiving a communication and processing and releasing the communication (e.g.; private_timerId: number;) 228. The delay can be implemented using a timer. The method parameter can be used to specify the method invoked after the delay has occurred. The invoker of the method can add data to the queue (e.g., code section 230). If it is the first time the method is invoked or if the queue is empty, a timer can be started for the amount of the delay (e.g., code section 232). Meanwhile, any communication data can be queued (e.g., public add(payloadToQueue:T): void{ 230). When the time period specified for the timer has elapsed, the data in the queue can be processed by the specified method to generate a result. A single communication including the computed result can be sent on to the receiver.

FIG. 1b illustrates a system 101 comprising another example of a system in which communications are throttled with ongoing input in accordance with aspects of the subject matter described herein. All or portions of system 101 may reside on one or more computers or computing devices such as the computers described below with respect to FIG. 3. System 101 or portions thereof may be provided as a stand-alone system or as a plug-in or add-in.

System 101 or portions thereof may include information obtained from a service (e.g., in the cloud) or may operate in a cloud computing environment. A cloud computing environment can be an environment in which computing services are not owned but are provided on demand. For example, information may reside on multiple devices in a networked cloud and/or data can be stored on multiple devices within the cloud.

Contemplated computing devices include but are not limited to desktop computers, tablet computers, laptop computers, notebook computers, personal digital assistants, smart phones, cellular telephones, mobile telephones, sensors, server computers and so on. A computing device such as computing device can include one or more processors and a memory that communicates with the one or more processors.

System 101 can include one or more computing devices such as, for example, computing device 102b. Contemplated computing devices include but are not limited to desktop computers, tablet computers, laptop computers, notebook computers, personal digital assistants, smart phones, cellular telephones, mobile telephones, sensors, server computers, client computers and so on. A computing device such as computing device 102b can include one or more processors such as processor 142b, etc., and a memory such as memory 144b that communicates with the one or more processors.

System 101 may include one or more program modules that when loaded into the memory and accessed by the one or more processors cause the processor to perform the action or actions attributed to the one or more program modules. The processor(s) may be configured to perform the action or actions attributed to the one or more program modules. System 101 may include any one of or any combination of any number of the following: a user interface such as user interface 126, user input such as user input 124, 126, etc. a timer such as timer 121 and or a throttler such as throttler 122. Multiple communications (e.g., user input 124, 126, etc.) may be received by throttler 122. Throttler 122 may queue the data to be processed in a queue such as queue 123 and set timer 121 for a delay. Throttler 122 may process the data in the queue to generate a single result. When the timer period is reached, a single communication 128 can be generated and sent to user interface 126.

FIG. 1c illustrates a system 103 comprising an example of a system in which communications are throttled with ongoing input in accordance with aspects of the subject matter described herein. All or portions of system 103 may reside on one or more computers or computing devices such as the computers described below with respect to FIG. 3. System 103 or portions thereof may be provided as a stand-alone system or as a plug-in or add-in.

System 103 or portions thereof may include information obtained from a service (e.g., in the cloud) or may operate in a cloud computing environment. A cloud computing environment can be an environment in which computing services are not owned but are provided on demand. For example, information may reside on multiple devices in a networked cloud and/or data can be stored on multiple devices within the cloud.

Contemplated computing devices include but are not limited to desktop computers, tablet computers, laptop computers, notebook computers, personal digital assistants, smart phones, cellular telephones, mobile telephones, sensors, server computers and so on. A computing device such as computing device can include one or more processors and a memory that communicates with the one or more processors.

System 103 can include one or more computing devices such as, for example, computing device 102c. Contemplated computing devices include but are not limited to desktop computers, tablet computers, laptop computers, notebook computers, personal digital assistants, smart phones, cellular telephones, mobile telephones, sensors, server computers, client computers and so on. A computing device such as computing device 102c can include one or more processors such as processor 142c, etc., and a memory such as memory 144c that communicates with the one or more processors.

System 103 may include one or more program modules that when loaded into the memory and accessed by the one or more processors cause the processor to perform the action or actions attributed to the one or more program modules. The processor(s) may be configured to perform the action or actions attributed to the one or more program modules. System 103 may include any one of or any combination of any number of the following: a first application such as application 1 136a, one or more communications such as communication 134, communication 136, etc. generated by application 2 136b, a timer such as timer 131 and or a throttler such as throttler 132. Multiple communications (e.g., communications 134, 136, etc.) may be received by throttler 132. Throttler 132 may queue the data to be processed in queue 133 and set a timer such as timer 131 for a delay. Throttler 132 may process the data in the queue to generate a single result. When the timer period specified for the timer is reached, a single communication such as single communication 138 can be generated and sent to application 1 136a.

FIG. 2a illustrates an example of a method 200 for throttling communications with ongoing input in accordance with aspects of the subject matter disclosed herein. The method described in FIG. 2a can be practiced by a system such as but not limited to the one described with respect to FIG. 1a and/or FIG. 1b and/or FIG. 1c. While method 200 describes a series of operations that are performed in a sequence, it is to be understood that method 200 is not limited by the order of the sequence depicted. For instance, some operations may occur in a different order than that described. In addition, one operation may occur concurrently with another operation. In some instances, not all operations described are performed. In some instances, not all operations performed are illustrated.

At operation 202 a timer can be set. A queue can be allocated. At operation 203 one or more communications (including but not limited to messages, notifications) can be received. At operation 204 the payload of the communication(s) can be added to the queue until the timer expires. At operation 206 the contents of the queue can be merged to generate a single result. At operation 208 one communication per group of communications can be created, including the generated single result. At operation 210 the single communication can be sent. At operation 212 the queue can be cleared and the timer can be reset. Processing can continue at operation 203.

Described herein is a computing device comprising a processor, a memory connected to the processor; the processor configured to set a timer, create a queue, receive at least one of a plurality of communications, place a payload associated with the at least one communication into the queue until the timer expires and in response to the timer expiring, process the contents of the queue to generate a single result and generate a single communication comprising the single result. A method that processes the contents of the queue can be specified. The at least one communication can be sent from a first application. The single communication comprising the single result can be sent to a second application. The data can be mergeable data. The data can be click and drag data. The second application can be a user interface.

Described herein is a method comprising configuring a processor of a computing device to set a timer, create a queue, receive at least one communication of a plurality of communications from a first application until the timer expires, store a payload of the at least one communication in the queue, in response to the timer expiring, process contents of the queue, generate a single communication having a payload comprising the result of processing contents of the queue and send the single communication to a second application. The first application can be a user interface executing on a client computer. The second application can execute on a server computer. The first application can be rendered by a browser using a script file. The script file can identify a method that merges the content of the queue. The script file can specify the duration of the timer. The script file can identify a method that sends the generated single result.

Described herein is a computing device comprising a processor, a memory connected to the processor; the processor configured to merge until a timer expires payloads associated with communications received from a sending application to generate a single result, the payloads stored in a queue and send a single communication comprising the single result to a receiving application. The queue can be cleared after contents of the queue have been processed. The timer can be reset. A delay parameter can specify how much time can elapse between receiving a communication and releasing the communication. a method parameter can specify the method invoked after a delay has occurred. A method parameter can specify the method invoked to send the communication.

Example of a Suitable Computing Environment

In order to provide context for various aspects of the subject matter disclosed herein, FIG. 3 and the following discussion are intended to provide a brief general description of a suitable computing environment 510 in which various embodiments of the subject matter disclosed herein may be implemented. While the subject matter disclosed herein is described in the general context of computer-executable instructions, such as program modules, executed by one or more computers or other computing devices, those skilled in the art will recognize that portions of the subject matter disclosed herein can also be implemented in combination with other program modules and/or a combination of hardware and software. Generally, program modules include routines, programs, objects, physical artifacts, data structures, etc. that perform particular tasks or implement particular data types. Typically, the functionality of the program modules may be combined or distributed as desired in various embodiments. The computing environment 510 is only one example of a suitable operating environment and is not intended to limit the scope of use or functionality of the subject matter disclosed herein.

With reference to FIG. 3, a computing device in the form of a computer 512 is described. Computer 512 may include at least one processing unit 514, a system memory 516, and a system bus 518. The at least one processing unit 514 can execute instructions that are stored in a memory such as but not limited to system memory 516. The processing unit 514 can be any of various available processors. For example, the processing unit 514 can be a graphics processing unit (GPU). The instructions can be instructions for implementing functionality carried out by one or more components or modules discussed above or instructions for implementing one or more of the methods described above. Dual microprocessors and other multiprocessor architectures also can be employed as the processing unit 514. The computer 512 may be used in a system that supports rendering graphics on a display screen. In another example, at least a portion of the computing device can be used in a system that comprises a graphical processing unit. The system memory 516 may include volatile memory 520 and nonvolatile memory 522. Nonvolatile memory 522 can include read only memory (ROM), programmable ROM (PROM), electrically programmable ROM (EPROM) or flash memory. Volatile memory 520 may include random access memory (RAM) which may act as external cache memory. The system bus 518 couples system physical artifacts including the system memory 516 to the processing unit 514. The system bus 518 can be any of several types including a memory bus, memory controller, peripheral bus, external bus, or local bus and may use any variety of available bus architectures. Computer 512 may include a data store accessible by the processing unit 514 by way of the system bus 518. The data store may include executable instructions, 3D models, materials, textures and so on for graphics rendering.

Computer 512 typically includes a variety of computer readable media such as volatile and nonvolatile media, removable and non-removable media. Computer readable media may be implemented in any method or technology for storage of information such as computer readable instructions, data structures, program modules or other data. Computer readable media include computer-readable storage media (also referred to as computer storage media) and communications media. Computer storage media includes physical (tangible) media, such as but not limited to, RAM, ROM, EEPROM, flash memory or other memory technology, CDROM, digital versatile disks (DVD) or other optical disk storage, magnetic cassettes, magnetic tape, magnetic disk storage or other magnetic storage devices that can store the desired data and which can be accessed by computer 512. Communications media include media such as, but not limited to, communications signals, modulated carrier waves or any other intangible media which can be used to communicate the desired information and which can be accessed by computer 512.

It will be appreciated that FIG. 3 describes software that can act as an intermediary between users and computer resources. This software may include an operating system 528 which can be stored on disk storage 524, and which can allocate resources of the computer 512. Disk storage 524 may be a hard disk drive connected to the system bus 518 through a non-removable memory interface such as interface 526. System applications 530 take advantage of the management of resources by operating system 528 through program modules 532 and program data 534 stored either in system memory 516 or on disk storage 524. It will be appreciated that computers can be implemented with various operating systems or combinations of operating systems.

A user can enter commands or information into the computer 512 through an input device(s) 536. Input devices 536 include but are not limited to a pointing device such as a mouse, trackball, stylus, touch pad, keyboard, microphone, voice recognition and gesture recognition systems and the like. These and other input devices connect to the processing unit 514 through the system bus 518 via interface port(s) 538. An interface port(s) 538 may represent a serial port, parallel port, universal serial bus (USB) and the like. Output devices(s) 540 may use the same type of ports as do the input devices. Output adapter 542 is provided to illustrate that there are some output devices 540 like monitors, speakers and printers that require particular adapters. Output adapters 542 include but are not limited to video and sound cards that provide a connection between the output device 540 and the system bus 518. Other devices and/or systems or devices such as remote computer(s) 544 may provide both input and output capabilities.

Computer 512 can operate in a networked environment using logical connections to one or more remote computers, such as a remote computer(s) 544. The remote computer 544 can be a personal computer, a server, a router, a network PC, a peer device or other common network node, and typically includes many or all of the elements described above relative to the computer 512, although only a memory storage device 546 has been illustrated in FIG. 3. Remote computer(s) 544 can be logically connected via communication connection(s) 550. Network interface 548 encompasses communication networks such as local area networks (LANs) and wide area networks (WANs) but may also include other networks. Communication connection(s) 550 refers to the hardware/software employed to connect the network interface 548 to the bus 518. Communication connection(s) 550 may be internal to or external to computer 512 and include internal and external technologies such as modems (telephone, cable, DSL and wireless) and ISDN adapters, Ethernet cards and so on.

It will be appreciated that the network connections shown are examples only and other means of establishing a communications link between the computers may be used. One of ordinary skill in the art can appreciate that a computer 512 or other client device can be deployed as part of a computer network. In this regard, the subject matter disclosed herein may pertain to any computer system having any number of memory or storage units, and any number of applications and processes occurring across any number of storage units or volumes. Aspects of the subject matter disclosed herein may apply to an environment with server computers and client computers deployed in a network environment, having remote or local storage. Aspects of the subject matter disclosed herein may also apply to a standalone computing device, having programming language functionality, interpretation and execution capabilities.

The various techniques described herein may be implemented in connection with hardware or software or, where appropriate, with a combination of both. Thus, the methods and apparatus described herein, or certain aspects or portions thereof, may take the form of program code (i.e., instructions) embodied in tangible media, such as floppy diskettes, CD-ROMs, hard drives, or any other machine-readable storage medium, wherein, when the program code is loaded into and executed by a machine, such as a computer, the machine becomes an apparatus for practicing aspects of the subject matter disclosed herein. As used herein, the term “machine-readable storage medium” shall be taken to exclude any mechanism that provides (i.e., stores and/or transmits) any form of propagated signals. In the case of program code execution on programmable computers, the computing device will generally include a processor, a storage medium readable by the processor (including volatile and non-volatile memory and/or storage elements), at least one input device, and at least one output device. One or more programs that may utilize the creation and/or implementation of domain-specific programming models aspects, e.g., through the use of a data processing API or the like, may be implemented in a high level procedural or object oriented programming language to communicate with a computer system. However, the program(s) can be implemented in assembly or machine language, if desired. In any case, the language may be a compiled or interpreted language, and combined with hardware implementations.

Although the subject matter has been described in language specific to structural features and/or methodological acts, it is to be understood that the subject matter defined in the appended claims is not necessarily limited to the specific features or acts described above. Rather, the specific features and acts described above are disclosed as example forms of implementing the claims.