Computers may receive communications from, and/or provide communications to, other devices. For example, computers that operate as servers for the World Wide Web may receive communications from other computer systems requesting web pages. Other computers may operate as file or storage servers for a local-area, or metropolitan, network, receiving requests for files from a computer system, retrieving the file from a storage subsystem and providing the file to the requesting computer system.
Computer systems process each communication via one or more processes running on the computer system. On many computer systems, several processes capable of processing communications may be running at any given time. Some of these simultaneously operating processes may handle certain types of communications, while other processes on the same computer system handle other types of communications.
When a conventional computer system receives a new communication of a certain type, it provides it to a process that handles that type of communications. Subsequent communications received from the same source for the same destination may be provided to the process via operating system calls made by the process to allow the same process to handle messages that are part of the same thread of communications.
However, there are several problems with this approach. One problem is that new communication threads are assigned to a process that can handle communications of that type whether the process is in the best position to receive a new communication thread. Because the process does not control the manner in which communications are assigned, one process may receive a new communication at a time that it should not, even though another process may be in a better position to receive the new communication. Additionally, the use of operating system calls to receive communications is processor intensive, which can limit the overall capacity of the computer system to process communications and perform other operations.
Some communications may be processed by one process, potentially altering the communication as a result. The resulting communications may then be processed by another process. The interprocess transfer of these communications may also require operating system calls, adding additional load to the processors on which the processes run, further limiting the capacity of the system to process communications and perform other operations. Furthermore, the process that first handles the communications may be required to identify the process that should subsequently process the communication, which adds complexity to the process, complexity that must be duplicated in each such process.
Some processes can erroneously overwrite communications provided by other processes. It can be desirable to restrict access by one process to communications written by another process.
It can be desirable to implement any solution to the problems described above in a cost-effective manner. The costs of communication interfaces such as gigabit Ethernet interfaces can be enormously sensitive to volume. Thus, it is preferable to incorporate high volume communication interfaces into any solution, than to use more expensive custom communication interfaces, which would reduce the desirability of any solution incorporating a custom communication interface.
What is needed is a system and method that can route new communications to processes under control of each process, provides communications to processes without the use of operating system calls, allows communications to be easily reassigned to other processes, restricts access by one process to communications written by another process, and uses conventional communication interfaces.