Katana VentraIP

Message passing

In computer science, message passing is a technique for invoking behavior (i.e., running a program) on a computer. The invoking program sends a message to a process (which may be an actor or object) and relies on that process and its supporting infrastructure to then select and run some appropriate code. Message passing differs from conventional programming where a process, subroutine, or function is directly invoked by name. Message passing is key to some models of concurrency and object-oriented programming.

This article is about the computer science concept. For other uses, see Message passing (disambiguation).

Message passing is ubiquitous in modern computer software. It is used as a way for the objects that make up a program to work with each other and as a means for objects and systems running on different computers (e.g., the Internet) to interact. Message passing may be implemented by various mechanisms, including channels.

Finding the process using different operating systems and programming languages, at different locations from where the message originated.

Saving the message on a queue if the appropriate object to handle the message is not currently running and then invoking the message when the object is available. Also, storing the result if needed until the sending object is ready to receive it.

Controlling various transactional requirements for distributed transactions, e.g. , consistency, isolation, durability (ACID) testing the data.[2]

atomicity

Message passing is a technique for invoking behavior (i.e., running a program) on a computer. In contrast to the traditional technique of calling a program by name, message passing uses an object model to distinguish the general function from the specific implementations. The invoking program sends a message and relies on the object to select and execute the appropriate code. The justifications for using an intermediate layer essentially falls into two categories: encapsulation and distribution.


Encapsulation is the idea that software objects should be able to invoke services on other objects without knowing or caring about how those services are implemented. Encapsulation can reduce the amount of coding logic and make systems more maintainable. E.g., rather than having IF-THEN statements that determine which subroutine or function to call a developer can just send a message to the object and the object will select the appropriate code based on its type.


One of the first examples of how this can be used was in the domain of computer graphics. There are various complexities involved in manipulating graphic objects. For example, simply using the right formula to compute the area of an enclosed shape will vary depending on if the shape is a triangle, rectangle, ellipse, or circle. In traditional computer programming this would result in long IF-THEN statements testing what sort of object the shape was and calling the appropriate code. The object-oriented way to handle this is to define a class called Shape with subclasses such as Rectangle and Ellipse (which in turn have subclasses Square and Circle) and then to simply send a message to any Shape asking it to compute its area. Each Shape object will then invoke the subclass's method with the formula appropriate for that kind of object.[1]


Distributed message passing provides developers with a layer of the architecture that provides common services to build systems made up of sub-systems that run on disparate computers in different locations and at different times. When a distributed object is sending a message, the messaging layer can take care of issues such as:

Mathematical models[edit]

The prominent mathematical models of message passing are the Actor model and Pi calculus.[6][7] In mathematical terms a message is the single means to pass control to an object. If the object responds to the message, it has a method for that message.


Alan Kay has argued that message passing is more important than objects in OOP, and that objects themselves are often over-emphasized. The live distributed objects programming model builds upon this observation; it uses the concept of a distributed data flow to characterize the behavior of a complex distributed system in terms of message patterns, using high-level, functional-style specifications.[8]

Actor model implementation

Amorphous computing

Communicating sequential processes

Flow-based programming

SOAP

Active message

Distributed computing

Event loop

Messaging pattern

Message passing in computer clusters

Message Passing Interface

(PVM)

Parallel Virtual Machine

AppleScript

Ramachandran, U.; M. Solomon; M. Vernon (1987). . Proceedings of the 14th annual international symposium on Computer architecture. ACM Press.

"Hardware support for interprocess communication"

Dally, William. . Retrieved 7 June 2013.

"The Jellybean Machine"

McQuillan, John M.; David C. Walden (1975). . Proceedings of the 1975 ACM SIGCOMM/SIGOPS workshop on Interprocess communications. ACM Press.

"Some considerations for a high performance message-based interprocess communication system"

Shimizu, Toshiyuki; Takeshi Horie; Hiroaki Ishihata (1992). . Proceedings of the 19th annual international symposium on Computer architecture. ACM Press.

"Low-latency message communication support for the AP1000"

A Packet History of Message Passing