非阻塞IO模型
2022-05-22 10:36:10 0 举报
非阻塞IO模型
作者其他创作
大纲/内容
处理数据报
无数据报准备好
recvfrom
我们把一个SOCKET接口设置为非阻塞就是告诉内核,当所请求的I/O操作无法完成时,不要将进程睡眠,而是返回一个错误。这样我们的I/O操作函数将不断的测试数据是否已经准备好,如果没有准备好,继续测试,直到数据准备好为止。在这个不断测试的过程中,会大量的占用CPU的时间。上述模型绝不被推荐。在非阻塞式 I/O 模型中,应用程序把一个套接口设置为非阻塞,就是告诉内核,当所请求的 I/O 操作无法完成时,不要将进程睡眠。而是返回一个错误,应用程序基于 I/O 操作函数将不断的轮询数据是否已经准备好,如果没有准备好,继续轮询,直到数据准备好为止。
系统调用
复制完成
返回成功指示
EWOULDBLOCK
内核
将数据从内核复制到用户空间
数据报准备好开始复制数据报
等待数据
应用程序
采用不断调用recvfrom轮询是否有数据报准备好轮询期间占用CPU
进程反复调用recvfrom等待返回成功指示(轮询)
0 条评论
下一页