两阶段式IO:
【阻塞 blocking IO】:
recvfrom -> [syscall -> wait -> copy ->] return OK!
【非阻塞 nonblocking IO】:
recvfrom ->[syscall -> wait -> ] return no data ready
recvfrom ->[syscall -> wait -> ] return no data ready
recvfrom ->[syscall -> wait -> ] return data ready
recvfrom ->[syscall -> copy -> ] return OK!
【多路复用IO multiplexingIO】
其中每个IO都是非阻塞IO,先使用poll/select 轮训IO句柄,如果有准备好的,开始第二阶段IO(阻塞读数据)
select/poll -> [syscall -> wait -> ] return readable
recvfrom -> [syscall -> copy -> ] return OK!
【信号驱动IO signal driven IO】
首先构建一个信号处理器,然后第二阶段阻塞读数据
signal handle -> [syscal -> wait -> ] return
[syscall -> ] signal handle-> recvfrom -> [syscall -> copy -> ] return OK!
【异步IO asynchronous IO】
两个阶段都是非阻塞的
aio_read -> [syscall -> wait -> ] return
[syscall -> copy -> ] aio_readCallback
【对比】