synchronous and asynchronous
Synchronous and asynchronous is for the interaction between the application and the kernel. Waiting until the data is read and then returning is synchronous, and returning directly is asynchronous.
Blocking and non-blocking are for processes and threads. In blocking mode, the read or write thread waits all the time, while in non-blocking mode, the read or write thread immediately returns a status value.