Message Passing: Difference between revisions

Jump to navigation Jump to search
Added reliable vs unreliable section and added to synchronous vs asynchronous
[unchecked revision][unchecked revision]
m (Fixed typo)
(Added reliable vs unreliable section and added to synchronous vs asynchronous)
Line 1:
If you consider writing a [[Microkernel]], you should layout how you'll manage the message passing. This page collects considerations on how you can do it.
 
==Reliable vs Unreliable Messaging==
;reliable
:Messages are always delivered unless the recipient does not exist. On failure, the sender is notified. In order to provide reliability, the message passing system ensures that messages have not been altered or corrupted between transmission and reception. Out-of-order message blocks are reordered and duplicate message blocks are removed. If an error occurs, the system will attempt to retransmit the message automatically. Reliable messaging, however, usually comes with noticeable overhead.
 
;unreliable
:Messages may/may not be delivered to the recipient. If a message ''is'' delivered, its contents may be corrupted, out of order, or duplicated. Also, the sender may not receive any acknowledgment of a successful delivery. This may sound entirely useless, but unreliable messaging is typically simpler and faster than reliable messaging. By putting a reliable message protocol on top of unreliable messaging, reliable messaging can be achieved (very much like the TCP protocol[reliable] with IP packets[unreliable]). Such a protocol might utilize "ACK" messages and timeouts to support reliable messages.
 
Reliable messaging is used when data ''must'' be delivered correctly bit-by-bit (as in transferring a file). Unreliable messaging is used when data must be sent quickly or when it doesn't really matter if some messages are corrupted or lost (like periodic "I'm alive" messages or when streaming audio/video).
 
==Synchronous vs Asynchronous==
Line 17 ⟶ 26:
 
What primitives will you need to get both asynchronous and synchronous message passing running? Three: send(message), receive(message) and request(message), as the send(message) primitive is/can be the same as the respond(message) primitive.
 
It is possible to get synchronous message passing via asynchronous message passing primitives and vice-versa. Message forwarders along with acknowledgment messages and messaging protocols can make this possible. Unfortunately, doing it this way is not efficient.
 
==The "Port" abstraction==
Anonymous user
Cookies help us deliver our services. By using our services, you agree to our use of cookies.

Navigation menu