This article is from the Threads Programming FAQ, by Bryan O'Sullivan email@example.com with numerous contributions by others.
Most system calls, whether on Unix or other platforms, block (or
"suspend") the calling thread until they complete, and continue its
execution immediately following the call. Some systems also provide
asynchronous (or "non-blocking") forms of these calls; the kernel
notifies the caller through some kind of out-of-band method when such
a system call has completed.
Asynchronous system calls are generally much harder for the programmer
to deal with than blocking calls.