$USDC Synchronous I/O
1. *Blocking*: The program waits for the I/O operation to complete before continuing execution.
2. *Sequential*: I/O operations are performed one at a time, in sequence.
3. *Simple coding*: Synchronous I/O is often easier to code and understand.
Asynchronous I/O
1. *Non-blocking*: The program continues execution while the I/O operation is being performed in the background.
2. *Concurrent*: Multiple I/O operations can be performed concurrently, improving system utilization.
3. *Complex coding*: Asynchronous I/O requires more complex coding and handling of callbacks or notifications.