用户线程阻塞在recvfrom调用上,等待内核把数据准备好并把数据拷贝到用户空间,再返回;
需要用户线程不断去询问内核数据是否准备好了;
依然是阻塞的,阻塞在select操作上。
线程通过将一个或多个fd传递给select,阻塞在select操作上,select帮我们侦测多个fd是否准备就绪,当有fd准备就绪时,select返回数据可读状态,应用程序再调用recvfrom读取数据。
非阻塞,但是是同步的,即应用程序收到信号后,需要自己去调用recvfrom把数据从内核拷贝到用户空间。
异步必然是非阻塞的,内核把数据准备好并拷贝到用户空间后,再通知用户程序去读数据;
原文:https://www.cnblogs.com/gitfong/p/13789651.html