本文图片均来自网络网络
1、同步IO---Blocking IOorm
在Blocking IO模型中,用户空间的应用程序执行一个系统调用(recvform),这会致使应用程序阻塞,直到数据准备好,而且将数据从内核空间复制到用户空间,最后进程才会去处理数据,在等待数据和复制数据这两个过程,整个进程都被阻塞。大体过程以下图:进程
2、同步非阻塞IO---NonBlocking IO图片
在NonBlocking IO模型中,IO设备是以非阻塞的形式打开的,若是IO操做还未完成,read操做会获得一个错误码。用户进程会每隔一段时间,就会read一次(轮询),直到有数据返回表示IO结束。非阻塞IO也会进行recvform系统调用,检查数据是否准备好,与阻塞IO不一样的是“非阻塞将大的整片时间的阻塞分红N多小的阻塞,因此进程在没两个小的阻塞之间可能会得到CPU资源”。资源
详细的说:NonBlocking IO的recvform系统调用以后,进程并无被阻塞,内核立刻返回给进程,若是数据尚未准备好,就返回一个Error。进程在返回以后,能够继续去抢占CPU资源,作一些别的工做。而后在适当的时间在发起一次recvform系统调用,重复上述过程。须要注意的是从内核空间拷贝数据到用户空间的时候,NonBlocking IO模型的进程也是阻塞的。大体过程如图:同步