An interesting observation here, if that as soon as you hide the implementation details (the actual communication means) from the user , but only leave suspending methods what are being invoked by users and return (resume) when the actor finished processing the corresponding message, then the implementation with channels becomes isomorphic to the implementation that simply protects every method with
Mutex
.