四、异步IO
当用户进程后调用read后,立刻返回, 不阻塞进程,去做其他事情。而 内核 会等数据就绪后从内核空间 拷贝到 用户空间, 等这一系列完成后再以信号的方式通知用户进程,之前的read操作完成了。真正的非阻塞IO
五、信号驱动IO
系统进程会先注册一个 SIGIO 信号,并安装一个信号处理函数(回调函数),当数据准备就绪时,内核会发送一个SIGIO信号给用户进程,用户进程会在回调函数中调用 recvfrom 把数据从 内核空间 复制到用户空间 (这个时候是阻塞的) 进行数据处理
这边从流程看 异步IO 跟 信号驱动IO 流程很像, 区别在于: 异步IO 把 整个 IO 的操作(对IO的检测,IO的操作)交给内核态,最后有数据时返回数据。而信号驱动是把 对IO的就绪检测交给内核态,而对IO的操作时机(从内核复制到用户空间)的时机交给用户进程决定