This disclosure generally relates to parallel processing and, more particularly, relates to intelligently distributing a plurality of transactions for parallel processing.
Typical parallel processing environments do not ensure that objects are modified or updated in the correct order. Rather, a first received event that modifies a particular object in memory may be processed prior to a second received event that modifies the same object in memory, which is one of the risks taken to gain the benefits of parallel processing. In certain situations, the order of updating or modifying an object based on the order of the events received is important. The need has arisen to provide a mechanism for processing multiple transactions in parallel while ensuring that transactions modifying the same object are processed in serial to preserve the order of events.
Disclosed are embodiments of systems and methods for distributing a plurality of transactions for parallel processing, which includes receiving a message, wherein the message comprises a plurality of transactions, such that each transaction comprises information associated with a target object, wherein the target object is stored in a memory. The systems and methods further include parsing the messages into the plurality of transactions, transmitting the parsed transactions to a transaction queue, receiving a transaction from the transaction queue, determining the target object associated with the transaction, assigning the transaction to a particular processing queue based on the target object, wherein the particular processing queue is associated with a particular processor, and guaranteeing that subsequent transactions associated with the target object are assigned to the same processing queue and the same processor, which guarantees that the target object will be modified in correct sequence, wherein the transaction associated with the target object is processed in parallel with other transactions associated with different target objects.
Also disclosed are embodiments of systems and methods for receiving a subsequent transaction from the transaction queue, determining that a second target object is associated with the subsequent transaction, assigning the subsequent transaction to a second processing queue based on the second target object being different than the first target object, and guaranteeing that additional subsequent transactions associated with the second target object are assigned to the second processing queue and the second processor, which guarantees that the second target object will be modified in correct sequence, wherein the transaction associated with the second object is processed by the second processor in parallel with the transaction associated with the target object processed by the first processor.
The present disclosure provides several important technical advantages. In certain embodiments, the present disclosure provides mechanisms for providing a high degree of scalability using parallel processing with little to no risk of memory or database collisions by guaranteeing the order that the targeted objects are modified or updated from the processing. By using the same thread or processor to process transactions that modify the same target object in serial, it eliminates the risks and errors caused when multiple threads or processors are used to process transactions modifying the same target object in parallel. Other technical advantages of the present disclosure will be readily apparent to one skilled in the art from the following figures, descriptions, and claims. Moreover, while specific advantages have been enumerated above, various embodiments may include all, some, or none of the enumerated advantages.
Embodiments are illustrated by way of example in the accompanying figures, in which like reference numbers indicate similar parts, and in which:
As used herein, messages 102 refer to any type of data that may be processed to modify, update, or store one or more values or objects 170 in memory 160. Messages 102 may be communicated in any form. Messages 102 may include one or more sub-events or transactions 104. Each transaction 104 refers to any type of data that may be processed to modify, update, or store a value or object 170 in memory 160. Transactions 104 may include software, computer instructions, and/or logic that may be processed by processors 150. For example, an electronic message 102 to transfer money from a first account to a second account may include a first transaction 104 to subtract the money from the first account and a second transaction 104 to add the money to the second account.
Remote servers 110 may represent a general or special-purpose computer capable of performing the described operations. For example, remote servers 110 may include, but are not limited to, mobile devices; cell phones; laptop computers; desktop computers; end user devices; video monitors; cameras; personal digital assistants (PDAs); or any other communication hardware, software, and/or encoded logic that supports the communication of messages 102, transactions 104, texts, or other suitable forms of data. Remote servers 110 may include any appropriate combination of hardware, software, memory, and/or encoded logic suitable to perform the described functionality. System 100 may comprise any appropriate number and type of remote servers 110. Although the embodiment illustrated in
Network 112 may represent any form of communication network supporting circuit-switched, packet-based, and/or any other suitable type of communications between remote servers 110, server 120, and any other elements illustrated in
Message queue 118 may be any type of storage or buffer implementation to receive messages 102 from remote servers 110. In some embodiments, message queue 118 may implement a first-in-first-out queue though any type of queue may be used to perform the described functionality. Although the embodiment illustrated in
Server 120 represents any appropriate combination of hardware, memory, logic, and/or software suitable to perform the described functions. For example, server 120 may be any suitable computing device comprising a processor and a memory. Server 120 may comprise one or more machines, workstations, laptops, blade servers, server farms, and/or stand-alone servers. Server 120 may be operable to communicate with any node or component in system 100 in any suitable manner.
Message parser 124 represents any appropriate combination of hardware, memory, logic, and/or software suitable to perform the described functions. Message parser 124 may receive message 102 via message queue 118 and parse message 102 into one or more transactions 104. Message parser 124 may intelligently identify different sub-events or transactions 104 in message 102 based on any type of criteria, including, but not limited to properties associated with message 102, the type of instruction included in message 102, the type of message 102, the object 170 modified by an instruction, etc. Message parser 124 may transmit each parsed transaction 104 of message 102 to transaction queue 128, and communicate an acknowledge signal to message queue 118 to remove the parsed message 102 from message queue 118.
Transaction queue 128 may be any type of storage or buffer implementation to receive transactions 104 from message parser 124. In some embodiments, transaction queue 128 may implement a first-in-first-out queue though any type of queue may be used to perform the described functionality. Although the embodiment illustrated in
Transaction manager 132 represents any appropriate combination of hardware, memory, logic, and/or software suitable to perform the described functions. Transaction manager 132 may receive one or more transactions 104 via transaction queue 128. Transaction manager 132 may intelligently identify which processing queue 140 and processor 150 should receive each particular transaction 104 based on any type of criteria, including, but not limited to properties associated with transaction 104, the type of instruction included in the transaction 104, the type of transaction 104, the target object 170 modified by transaction 104, etc. Thus, transaction manager 132 may be able to determine an affinity for certain transactions 104 that should be processed in serial by a particular processor 150. In some embodiments, transaction manager 132 may ensure that a transaction 104 and subsequent transactions 104 that modify or update the same target object 170 are assigned to the same processing queue 140 associated with the same processor 150, which guarantees that the target object 170 be modified or updated in the correct order, while other processors 150 may process other transactions 104 in parallel that modify or update a different target object 170. In some embodiments, all transactions 104 associated with a particular row in a database may be assigned to the same processing queue 140. In some embodiments, transaction manager 132 may determine that all computations for one or more transactions 104 be assigned to a particular processing queue 140 and processed by its respective processor 150 while all other processing queues 140 and processors 150 are blocked from processing any other transactions 104. In some embodiments, transaction manager 132 may determine to use one or more processing queues 140 and processors 150 in a synchronized order. In some embodiments, transaction manager 132 may instruct all transactions 104 within processing queues 140 to be processed and to block all subsequent transactions 104 from being placed in processing queues 140 so that maintenance may be performed.
Processing queue 140-140n may be any type of storage or buffer implementation to receive transactions 104 from transaction manager 132. In some embodiments, processing queue 140 may implement a first-in-first-out queue though any type of queue may be used to perform the described functionality. Each processing queue 140-140n may be associated with a particular processor 150-150n, such that each transaction 104 in a particular processing queue 140 may be processed in serial. In some embodiments, processing queues 140-140n may be concurrent such that put and get operations may be performed without locking.
Aggregator 146-146n represents any appropriate combination of hardware, memory, logic, and/or software suitable to perform the described functions. Aggregator 146 may be able to analyze transactions 104 stored in a particular processing queue 140 and determine if one or more transactions 104 should be combined into a single transaction 104, which creates efficiencies in system 100 by only having to process one transaction 104 and one memory write, instead of unnecessarily processing multiple transactions 104 and memory writes. In some embodiments, aggregator 146 may combine all transactions 104 modifying a particular target object 170 into a single transaction 104. In some embodiments, aggregator 146 may not combine multiple transactions 104 associated with the same object 170 if another intervening transaction is instructed to reset target object 170. For example, if one transaction 104 in a particular processing queue 140 increases the value associated with the number of hits for web service XYZ by 300 and another transaction 104 in the processing queue 140 increases the value associated with the number of hits for the same web service XYZ by 500, then aggregator 146 may create a new transaction increasing the value associated with the number of hits for web service XYZ by 800.
Processor 150-150n may represent and/or include any form of processing component, including general purpose computers, dedicated microprocessors, or other processing devices capable of processing electronic information. Examples of processor 150 include digital signal processors (DSPs), application-specific integrated circuits (ASICs), field-programmable gate arrays (FPGAs), and any other suitable specific or general purpose processors. After successfully processing transaction 104 and updating or modifying target object 170 in memory 160, processor 150 or another component may send an acknowledge message to transaction queue 128 to remove transaction 104 from transaction queue 128.
Memory 160 may comprise any collection and arrangement of volatile and/or non-volatile components suitable for storing data and objects 170. For example, memory 160 may comprise random access memory (RAM) devices, read only memory (ROM) devices, magnetic storage devices, shared memory, optical storage devices, and/or any other suitable data storage devices. In particular embodiments, memory 160 may represent, in part, computer-readable storage media on which computer instructions and/or logic are encoded. Although shown in
At step 208, transaction manager 132 may receive a first transaction 104 from transaction queue 128. At step 210, transaction manager 132 may intelligently determine an affinity associated with the first transaction 104 based on any type of criteria, including, but not limited to properties associated with the first transaction 104, the type of instruction included in the first transaction 104, the type of transaction 104, the target object 170 modified by the first transaction 104, etc. Thus, transaction manager 132 may be able to determine an affinity associated with the first transactions 104 that should be processed in serial by a particular processor 150, along with other transactions 104 having the same affinity (e.g., the transactions that modify the same target object). At step 212, transaction manager 132 may assign a first processing queue 140 and a first processor 150 to receive the first transaction 104 based on the affinity associated with the first transaction 104.
At step 214, transaction manager 132 may receive a second transaction 104 from transaction queue 128. At step 216, transaction manager 132 may intelligently determine that a different affinity is associated with the second transaction than was associated with the first transaction 104 based on any type of criteria, including, but not limited to properties associated with the second transaction 104, the type of instruction included in the second transaction 104, the type of transaction 104, the target object 170 modified by the second transaction 104, etc. Thus, transaction manager 132 may be able to determine an affinity associated with the second transactions 104 that should be processed in serial by a particular processor 150, along with other transactions 104 having the same affinity (e.g., the transactions that modify the same target object). At step 218, transaction manager 132 may assign a second processing queue 140 and a second processor 150 to receive the second transaction 104 based on the affinity associated with the second transaction.
At step 220, the first processor 150 may process the first transaction 104 that modifies or updates the first object 170 in parallel with the second processor 150 processing the second transaction 104 that modifies or updates the second object 170. At step 222, transaction manager 132 may ensure that subsequent transactions 104 modifying or updating the first object 170 are also assigned to the first processing queue 140 and first processor 150, and that subsequent transactions 104 modifying or updating the second object are also assigned to the second processing queue 140 and second processor 150. Thus, transaction manager 132 may guarantee that the first target object 170 is modified or updated safely and in the correct order and that the second target object 170 is modified or updated safely and in the correct order, while gaining the benefits of the first processor 150 and second processor 150 (and other processors) processing transactions 104 in parallel. Using the same thread or processor 150 to process transactions modifying the same target object 170 in serial greatly reduces the risks and errors that may occur when multiple threads or processors are processing transactions 104 modifying the same target object 170 in parallel.
As used herein, messages 302 refer to any type of data that may be processed to modify, update, or store one or more values or objects 370 in memory 360. Messages 302 may be communicated in any form. Messages 302 may include one or more sub-events or transactions 304. Each transaction 304 refers to any type of data that may be processed to modify, update, or store a value or object 370 in memory 360. Transactions 304 may include software, computer instructions, and/or logic that may be processed by processors 350. For example, an electronic message 302 to transfer money from a first account to a second account may include a first transaction 304 to subtract the money from the first account and a second transaction 304 to add the money to the second account.
Remote servers 310 may represent a general or special-purpose computer capable of performing the described operations. For example, remote servers 310 may include, but are not limited to, mobile devices; cell phones; laptop computers; desktop computers; end user devices; video monitors; cameras; personal digital assistants (PDAs); or any other communication hardware, software, and/or encoded logic that supports the communication of messages 302, transactions 304, texts, or other suitable forms of data. Remote servers 310 may include any appropriate combination of hardware, software, memory, and/or encoded logic suitable to perform the described functionality. System 300 may comprise any appropriate number and type of remote servers 310. Although the embodiment illustrated in
Network 312 may represent any form of communication network supporting circuit-switched, packet-based, and/or any other suitable type of communications between remote servers 310, parser server 320, processing servers 331, and any other elements illustrated in
Message queue 318 may be any type of storage or buffer implementation to receive messages 302 from remote servers 310. In some embodiments, message queue 318 may implement a first-in-first-out queue though any type of queue may be used to perform the described functionality. Although the embodiment illustrated in
Parser server 320 represents any appropriate combination of hardware, memory, logic, and/or software suitable to perform the described functions. For example, parser server 320 may be any suitable computing device comprising a processor and a memory. Parser server 320 may comprise one or more machines, workstations, laptops, blade servers, server farms, and/or stand-alone servers. Parser server 320 may be operable to communicate with any node or component in system 300 in any suitable manner.
Message parser 324 represents any appropriate combination of hardware, memory, logic, and/or software suitable to perform the described functions. Message parser 324 may receive message 302 via message queue 318 and parse message 302 into one or more transactions 304. Message parser 324 may intelligently identify different sub-events or transactions 304 in message 302 based on any type of criteria, including, but not limited to properties associated with message 302, the type of instruction included in message 302, the type of message 302, the object 370 modified by an instruction, etc. Message parser 324 may transmit each parsed transaction 304 of message 302 to transaction queue 328, and communicate an acknowledge signal to message queue 318 to remove the parsed message 302 from message queue 318.
Transaction queue 328 may be any type of storage or buffer implementation to receive transactions 304 from message parser 324. In some embodiments, transaction queue 328 may implement a first-in-first-out queue though any type of queue may be used to perform the described functionality. Although the embodiment illustrated in
Transaction balancer 330 represents any appropriate combination of hardware, memory, logic, and/or software suitable to perform the described functions. Transaction balancer 330 may receive one or more transactions 304 via transaction queue 328. Transaction balancer 330 may intelligently identify which processing server 331 should receive each particular transaction 304 based on any type of criteria, including, but not limited to properties associated with transaction 304, the type of instruction included in the transaction 304, the type of transaction 304, the target object 370 modified by transaction 304, etc. Thus, transaction balancer 330 may be able to determine an affinity for certain transactions 304 that should be processed by the same processing server 331. In some embodiments, transaction balancer 330 may ensure that a transaction 304 and subsequent transactions 304 that modify or update the same target object 370 or share the same affinity are assigned to the same processing server, which may create additional efficiencies when processing transactions 304. For example, transaction balancer 330 may assign all transactions associated with the same database, or the same table of a database, or the same row of a table to a particular processing server 332, which may create additional efficiencies. In another example, transaction balancer 330 may assign all transactions associated with a particular geography to a particular processing server 332, which may also create additional efficiencies. For example, if rules associated with banking accounts in California need to be updated before processing any further transactions on banking accounts in California, it is much more efficient and simpler to block all processing queues in the processing server 331 associated with banking accounts in California, which allows for all of the other transactions 104 on the other processing servers 331 to be processed as normal without having to stop processing transactions for a particular software update or maintenance issue. Although the embodiment illustrated in
Processing servers 331-331n represent any appropriate combination of hardware, memory, logic, and/or software suitable to perform the described functions. For example, each processing server 331 may be any suitable computing device comprising a processor and a memory. Processing servers 331 may comprise one or more machines, workstations, laptops, blade servers, server farms, and/or stand-alone servers. Processing servers 331 may be operable to communicate with any node or component in system 300 in any suitable manner.
Transaction manager 332 represents any appropriate combination of hardware, memory, logic, and/or software suitable to perform the described functions. Transaction manager 332 may receive one or more transactions 304 via transaction balancer 330. Transaction manager 332 may intelligently identify which processing queue 340 and processor 350 should receive each particular transaction 304 based on any type of criteria, including, but not limited to properties associated with transaction 304, the type of instruction included in the transaction 304, the type of transaction 304, the target object 370 modified by transaction 304, etc. Thus, transaction manager 332 may be able to determine an affinity for certain transactions 304 that should be processed in serial by a particular processor 350. In some embodiments, transaction manager 332 may ensure that a transaction 304 and subsequent transactions 304 that modify or update the same target object 370 are assigned to the same processing queue 340 associated with the same processor 350, which guarantees that the target object 370 be modified or updated in the correct order, while other processors 350 may process other transactions 304 in parallel that modify or update a different target object 370. In some embodiments, all transactions 304 associated with a particular row in a database may be assigned to the same processing queue 340. In some embodiments, transaction manager 332 may determine that all computations for one or more transactions 304 be assigned to a particular processing queue 340 and processed by its respective processor 350 while all other processing queues 340 and processors 350 are blocked from processing any other transactions 304. In some embodiments, transaction manager 332 may determine to use one or more processing queues 340 and processors 350 in a synchronized order. In some embodiments, transaction manager 332 may instruct all transactions 304 within processing queues 340 to be processed and to block all subsequent transactions 304 from being placed in processing queues 340 so that maintenance may be performed.
Processing queues 340-340n may be any type of storage or buffer implementation to receive transactions 304 from transaction manager 332. In some embodiments, processing queue 340 may implement a first-in-first-out queue though any type of queue may be used to perform the described functionality. Each processing queue 340-340n may be associated with a particular processor 350-350n, such that each transaction 304 in a particular processing queue 340 may be processed in serial. In some embodiments, processing queues 340-340n may be concurrent such that put and get operations may be performed without locking.
Aggregators 346-346n represents any appropriate combination of hardware, memory, logic, and/or software suitable to perform the described functions. Aggregator 346 may be able to analyze transactions 304 stored in a particular processing queue 340 and determine if one or more transactions 304 should be combined into a single transaction 304, which creates efficiencies in system 300 by only having to process one transaction 304 and one memory write, instead of unnecessarily processing multiple transactions 304 and memory writes. In some embodiments, aggregator 346 may combine all transactions 304 modifying a particular target object 370 into a single transaction 304. In some embodiments, aggregator 346 may not combine multiple transactions 304 associated with the same object 370 if another intervening transaction is instructed to reset target object 370. For example, if one transaction 304 in a particular processing queue 340 increases the value associated with the number of hits for web service XYZ by 300 and another transaction 304 in the processing queue 340 increases the value associated with the number of hits for the same web service XYZ by 500, then aggregator 346 may create a new transaction increasing the value associated with the number of hits for web service XYZ by 800.
Processor 350-350n may represent and/or include any form of processing component, including general purpose computers, dedicated microprocessors, or other processing devices capable of processing electronic information. Examples of processor 350 include digital signal processors (DSPs), application-specific integrated circuits (ASICs), field-programmable gate arrays (FPGAs), and any other suitable specific or general purpose processors. After successfully processing transaction 304 and updating or modifying target object 370 in memory 360, processor 350 or another component may send an acknowledge message to transaction queue 328 to remove transaction 304 from transaction queue 328 or transaction balancer 330.
Memory 360 may comprise any collection and arrangement of volatile and/or non-volatile components suitable for storing data and objects 370. For example, memory 360 may comprise random access memory (RAM) devices, read only memory (ROM) devices, magnetic storage devices, shared memory, optical storage devices, and/or any other suitable data storage devices. In particular embodiments, memory 360 may represent, in part, computer-readable storage media on which computer instructions and/or logic are encoded. Although shown in
At step 408, transaction manager 332 may receive a first transaction 304 from transaction queue 328.
At step 410, transaction balancer 330 may intelligently determine an affinity associated with the first transaction 304 based on any type of criteria, including, but not limited to properties associated with the first transaction 304, the type of instruction included in the first transaction 304, the type of transaction 304, the target object 370 modified by the first transaction 304, etc. At step 414, transaction balancer 330 may be able to determine an affinity associated with the first transaction 304 that should be assigned to a first processing server 331, along with other transactions 304 having the same affinity (e.g., the transactions modify an object within the same table or within the same geographic region).
At step 416, transaction manager 332 may intelligently determine an affinity associated with the first transaction 304 based on any type of criteria, including, but not limited to properties associated with the first transaction 304, the type of instruction included in the first transaction 304, the type of transaction 304, the target object 370 modified by the first transaction 304, etc. Thus, transaction manager 332 may be able to determine an affinity associated with the first transactions 304 that should be processed in serial by a particular processor 150, along with other transactions 304 having the same affinity (e.g., the transactions that modify the same target object). Transaction manager 332 may assign a first processing queue 340 and a first processor 350 on first processing server 31 to receive the first transaction 104 based on the affinity associated with the first transaction 304.
At step 418, transaction balancer 330 may receive a second transaction 304 from transaction queue 328.
At step 420, transaction balancer 330 may intelligently determine an affinity associated with the second transaction 304 based on any type of criteria, including, but not limited to properties associated with the second transaction 304, the type of instruction included in the second transaction 304, the type of transaction 304, the target object 370 modified by the second transaction 304, etc. At step 422, transaction balancer 330 may be able to determine an affinity associated with the second transaction 304 that should be assigned to a second processing server 331, along with other transactions 304 having the same affinity (e.g., the transactions modify an object within the same table or within the same geographic region).
At step 424, transaction manager 332 may intelligently determine an affinity associated with the second transaction 304 based on any type of criteria, including, but not limited to properties associated with the second transaction 304, the type of instruction included in the second transaction 304, the type of transaction 304, the target object 370 modified by the second transaction 304, etc. Thus, transaction manager 332 may be able to determine an affinity associated with the second transactions 304 that should be processed in serial by a particular processor 150, along with other transactions 304 having the same affinity (e.g., the transactions that modify the same target object). Transaction manager 332 may assign a first processing queue 340 and a first processor 350 on second processing server 331 to receive the first transaction 104 based on the affinity associated with the second transaction 304.
At step 426, the first processing server 331 may process the first transaction 304 that modifies or updates the first object 370 in parallel with the second processing server 331 processing the second transaction 304 that modifies or updates the second object 370. At step 428, transaction balancer 330 and transaction manager 332 may ensure that subsequent transactions 304 modifying or updating the first object 370 are also assigned to the first processing queue 340 and first processor 350 of first processing server 331, and that subsequent transactions 304 modifying or updating the second object are also assigned to the first processing queue 340 and first processor 350 of second processing server 331. Thus, transaction balancer 330 and transaction manager 332 may guarantee that the first target object 370 is modified or updated safely and in the correct order and that the second target object 370 is modified or updated safely and in the correct order, while gaining the benefits of the multiple processors 350 of multiple processing servers 331 processing transactions 304 in parallel. Using the same thread or processor 350 to process transactions modifying the same target object 370 in serial greatly reduces the risks and errors that may occur when multiple threads or processors are processing transactions 304 modifying the same target object 370 in parallel.
While various embodiments have been described above, it should be understood that they have been presented by way of example only, and not limitation. Thus, the breadth and scope of a preferred embodiment should not be limited by any of the above described exemplary embodiments, but should be defined only in accordance with the claims and their equivalents for any patent that issues claiming priority from the present provisional patent application.
For example, as referred to herein, a machine or engine may be a virtual machine, computer, node, instance, host, or machine in a networked computing environment. Also as referred to herein, a networked computing environment is a collection of machines connected by communication channels that facilitate communications between machines and allow for machines to share resources. Network may also refer to a communication medium between processes on the same machine. Also as referred to herein, a server is a machine deployed to execute a program operating as a socket listener and may include software instances.
Resources may encompass any types of resources for running instances including hardware (such as servers, clients, mainframe computers, networks, network storage, data sources, memory, central processing unit time, scientific instruments, and other computing devices), as well as software, software licenses, available network services, and other non-hardware resources, or a combination thereof.
A networked computing environment may include, but is not limited to, computing grid systems, distributed computing environments, cloud computing environment, etc. Such networked computing environments include hardware and software infrastructures configured to form a virtual organization comprised of multiple resources which may be in geographically disperse locations.
Various terms used herein have special meanings within the present technical field. Whether a particular term should be construed as such a “term of art,” depends on the context in which that term is used. “Connected to,” “in communication with,” or other similar terms should generally be construed broadly to include situations both where communications and connections are direct between referenced elements or through one or more intermediaries between the referenced elements, including through the Internet or some other communicating network. “Network,” “system,” “environment,” and other similar terms generally refer to networked computing systems that embody one or more aspects of the present disclosure. These and other terms are to be construed in light of the context in which they are used in the present disclosure and as those terms would be understood by one of ordinary skill in the art would understand those terms in the disclosed context. The above definitions are not exclusive of other meanings that might be imparted to those terms based on the disclosed context. Words of comparison, measurement, and timing such as “at the time,” “equivalent,” “during,” “complete,” and the like should be understood to mean “substantially at the time,” “substantially equivalent,” “substantially during,” “substantially complete,” etc., where “substantially” means that such comparisons, measurements, and timings are practicable to accomplish the implicitly or expressly stated desired result.
Additionally, the section headings herein are provided for consistency with the suggestions under 37 CFR 1.77 or otherwise to provide organizational cues. These headings shall not limit or characterize the invention(s) set out in any claims that may issue from this disclosure. Specifically and by way of example, although the headings refer to a “Technical Field,” such claims should not be limited by the language chosen under this heading to describe the so-called technical field. Further, a description of a technology in the “Background” is not to be construed as an admission that technology is prior art to any invention(s) in this disclosure. Neither is the “Brief Summary” to be considered as a characterization of the invention(s) set forth in issued claims. Furthermore, any reference in this disclosure to “invention” in the singular should not be used to argue that there is only a single point of novelty in this disclosure. Multiple inventions may be set forth according to the limitations of the multiple claims issuing from this disclosure, and such claims accordingly define the invention(s), and their equivalents, that are protected thereby. In all instances, the scope of such claims shall be considered on their own merits in light of this disclosure, but should not be constrained by the headings set forth herein.