<aside>
💡 Channels are constructs that are based upon communication, in which processes send and receive messages to and from each other.
</aside>
Synchronous vs Asynchronous communications
- Synchronous Communication: The exchange of a message is an atomic action requiring the participation of both the sending process, called the sender, and the receiving process, called the receiver.
- If either the sender or the receiver is ready to send/receive but the other is not ready, then the sender/receiver is blocked
- The act of communication synchronizes the execution sequences of the two processes.
- An analogy is a telephone call: Both callers have to be synchronized for the call to go through.
- Asynchronous Communication: The sender can be allowed to send a message and continue without blocking.
- There is no temporal dependency between the execution sequences of the two processes.
- It requires a buffer to hold the messages on the receiving end until it is ready to process it.
- An analogy is a telephone email: The sender sends the email and the receiver receives it in its inbox and later processes (reads) it.
Addessing
Symmetric: The sender and receiver both know each others address
Asymmetric: Only the sender knows the address of the receiver



Data flow
Unidirectional: The sender sends to the receiver and the communication ends. If the receiver wants to answer than a new channel has to be created.
Bidirectional: The sender and receiver send each other messages through the same channel.

Channels
<aside>
💡 A channel connects a sending process with a receiving process.
Channels are typed, meaning that you must declare the type of the message that can be sent on the channel.
</aside>


