推荐查看下面这篇文章,描述的很详细:
http://blog.csdn.net/historyasamirror/article/details/5778378
这里只做下简单的个人总结:
阻塞、非阻塞区别
他们之间主要区别是,在没有数据时,网络请求是否直接返回:
阻塞 — 一直等到数据准备好,并完成数据从内核向用户copy
非阻塞 — 没有数据立即返回,需要不断向内核询问数据有没有准备好同步、异步区别
他们之间主要区别是,数据准备好时,IO操作过程中,进程是否被阻塞
同步 — 数据准备好后,请求读写操作时,需要等待数据从内核向用户copy完成
异步 — 数据准备好后,内核完成数据从内核向用户copy后,向用户进程发送信号,用户执行信号处理函数完成数据接收