I watched the lecture online, and I didn't see an answer to this question: When is it useful/practical to use a message passing model?
I understand that having no shared address space can be useful for avoiding having two threads update the same variable out of order, but what are some particular cases when the message passing model is better than others that do have a shared address space?
This comment was marked helpful 0 times.
arjunh
This page here is pretty good at explaining the details:
Just to summarize, here are some reasons why you'd want to use a message-passing model:
Your hardware system can be simpler (eg NUMA). If all components of the
system don't need share the same memory space, it allows you to
'distribute' your memory addresses substantially. Distributed systems, by
definition, would use message-passing models for this reason.
Synchronization is a bit cleaner in a message-passing model. You don't
need to use semaphores and locks in a message-passing model; you just need
mechanisms to pass data and messages across components.
Of course, there is the overhead of constructing/sending/receiving messages in such a system. However, message-passing makes sense in a variety of contexts. For instance, an operating system is essentially built on message-passing, via interrupts, signals, I/O, etc.
This comment was marked helpful 1 times.
vrkrishn
I feel that another flaw in the message passing model (more for distributed systems rather than at the OS level) is that it seems like a process or task assigned to manage the sending and receiving of messages from task to task.
The problem that I see is that if one task depends on a message sent from another task to start processing, and the message passing manager is not currently running, there could be deadlocks from the lack of message passing capability.
Overall, I think OS message passing has better utility because of how signals are built into the system but message systems above the OS layers need more micromanaging about message handlers and receivers.
I watched the lecture online, and I didn't see an answer to this question: When is it useful/practical to use a message passing model?
I understand that having no shared address space can be useful for avoiding having two threads update the same variable out of order, but what are some particular cases when the message passing model is better than others that do have a shared address space?
This comment was marked helpful 0 times.
This page here is pretty good at explaining the details:
Just to summarize, here are some reasons why you'd want to use a message-passing model:
system don't need share the same memory space, it allows you to 'distribute' your memory addresses substantially. Distributed systems, by definition, would use message-passing models for this reason.
Of course, there is the overhead of constructing/sending/receiving messages in such a system. However, message-passing makes sense in a variety of contexts. For instance, an operating system is essentially built on message-passing, via interrupts, signals, I/O, etc.
This comment was marked helpful 1 times.
I feel that another flaw in the message passing model (more for distributed systems rather than at the OS level) is that it seems like a process or task assigned to manage the sending and receiving of messages from task to task.
The problem that I see is that if one task depends on a message sent from another task to start processing, and the message passing manager is not currently running, there could be deadlocks from the lack of message passing capability.
Overall, I think OS message passing has better utility because of how signals are built into the system but message systems above the OS layers need more micromanaging about message handlers and receivers.
This comment was marked helpful 0 times.