Linux IO模型阻塞+非阻塞(一)
2025-12-09 22:51:25 0 举报
Linux IO模型图,包括阻塞IO、非阻塞IO的时序图,描述两种模型下应用与内核的交互关系
作者其他创作
大纲/内容
有数据到达复制到用户内存
无数据时阻塞等待
Application
recffrom系统调用
返回成功
创建阻塞socket
Kernel
阻塞IO应用调用 recvfrom() 后立即进入内核,如果内核暂时没有数据,调用线程会阻塞等待,直到数据到达。数据准备好后,内核将数据复制到用户空间,并给应用返回成功。对应用来说,整个过程就是“一次调用、等待、拿到数据”非阻塞IO应用将 socket 设置为非阻塞后,调用 recvfrom() 若无数据会立即返回 EAGAIN/EWOULDBLOCK。应用通过循环不断重试读取,直到某次调用时内核已有数据可读,这时内核将数据复制到用户空间并返回成功。判断“是否继续读取”完全由应用自身控制。
recffrom 系统调用
返回socket fd
EAGAIN/EWOULDBLOCK 无数据
处理数据
非阻塞IO模型
阻塞IO模型
创建非阻塞socket
loop
无数据
有数据
0 条评论
下一页