-
异步IO
调用一个异步IO函数接收数据时,不管有没有数据,该函数都会立即返回。调用异步IO函数时候要指定一个接收数据的缓冲区
,还要指定一个回调函数
-
非阻塞IO和异步IO区别
- 非阻塞IO:不停地调用IO函数检查数据是否到来,如果数据到来,就要
卡在IO函数
把数据从内核缓冲区复制到用户缓冲区,然后IO函数才能返回 - 异步IO: 不需要不停的调用IO函数检查数据是否到来,只需要调用1次。内核检查到数据的到来,内核负责把数据复制到指定缓冲区(复制期间完全不会卡住应用程序的执行流程),然后内核负责通知数据到来
- 非阻塞IO:不停地调用IO函数检查数据是否到来,如果数据到来,就要
-
同步IO
系统函数select和poll用的就是同步IO,需要调用2个函数才能获取数据。
- 先调用select函数,判断是否有数据(该函数只能判断是否有数据,不能读取数据)
- 如果没有数据就卡在那等
- 如果有数据就select返回,之后调用recvfrom函数去取数据。取数据涉及数据从内核空间复制到用户空间,所以复制数据时还是要卡着
- 优点:IO复用(accept到多个客户端socket可以放在一起)
Reactor模式:IO复用+异步方法使用非阻塞调用(回调函数+数据缓冲区)