Q: Does "synchronized I/O" always mean "blocking I/O"? I'm just confused about the "synchronized/asynchronized I/O" and "blocking/non-blocking I/O". I suppose that "synchronized I/O" always mean some kind of blocking I/O like read/write, they're blocking operations, so they're "synchronized I/O".
Please kindly help to correct!

A: "Asynchronous" or "non-blocking" I/O are, indeed, effectively synonymous. However, if we're using Linux terminology, "blocking" and "synchronized" I/O are different.
"Blocking" just tells you that the syscall won't return until the kernel has recorded the data... somewhere. There's no guarantee that this record is persistent in the event of an unexpected power loss or hardware failure; it can simply be a writeahead cache, for example -- so your blocking call can return at a point where other processes running at the time can see the write, but where that write would be lost if a power failure took place.
"Synchronized" in the O_SYNC sense tells you that the syscall won't return until the data is actually persisted to hardware.

Thus: All synchronized I/O is blocking, but not all blocking I/O is synchronized.
