This document discusses synchronous and asynchronous computation in distributed systems. Synchronous distributed systems have bounded process execution times and message transmission delays, allowing them to be used for hard real-time applications through timeouts. However, they are difficult and costly to implement. Asynchronous distributed systems have no bounds on timing, making them unpredictable but able to tolerate unpredictable delays and crashes. Event ordering helps determine the sequence of events across processes.