The message passing primitives are tightly coupled to scheduling. When there is no need for task switching or blocking, data is copied immediately, with the effect that the operation is very fast. When receiving a message, if there is no message available, tasks are immediately blocked from execution so that other tasks may run. Neither the user nor the kernel has to make independent decisions regarding task synchronization and scheduling, which improves the clarity of the user code and the robustness of the system design. Overall, this gives a very responsive system performance.