五种IO模型

阻塞IO

用户线程阻塞在recvfrom调用上,等待内核把数据准备好并把数据拷贝到用户空间,再返回;

非阻塞IO

需要用户线程不断去询问内核数据是否准备好了;

IO复用

依然是阻塞的,阻塞在select操作上。

线程通过将一个或多个fd传递给select,阻塞在select操作上,select帮我们侦测多个fd是否准备就绪,当有fd准备就绪时,select返回数据可读状态,应用程序再调用recvfrom读取数据。

信号驱动IO

非阻塞,但是是同步的,即应用程序收到信号后,需要自己去调用recvfrom把数据从内核拷贝到用户空间。

异步IO

异步必然是非阻塞的,内核把数据准备好并拷贝到用户空间后,再通知用户程序去读数据;

参考这里有个写得很详细的文章

posted @ 2020-10-09 23:56  gitfong  阅读(100)  评论(0编辑  收藏  举报