This module provides interprocess communication channels. This is meant
to be used by logger-like programs that want to send status reports to
N listeners (where N >= 0).
Such a logger would create a Sink with a certain tag and just start
writing messages to it. Then, at any point a client knowing the tag can
attach a Source and receive those messages -- until it disconnects.
This is all completely transparent to the logger.
Because each message is intended to be a complete status update, write
does not buffer unsent messages: A client that is not ready to read when
a new message arrives will simply skip it (and hopefully continue
processing with the next message). However, there is one exception to
this rule: A Sink remembers the last message sent and repeats it
to newly connected clients. Therefore a client will always receive a
message immediately after connecting unless the logger hasn't sent
anything so far.