阻塞 | 进程发起I/O调用,为完成之前,当前进程会被挂起 | 内核读取数据 用户主动查看数据是否加载完成 |
非阻塞 | 进程发起I/O调用,被调用函数完成之前不会阻塞当前进程而是立即返回 然后在时不时看函数调用是否完成 (盲等) | 内核读取数据,内核响应数据给用户 |
同步 | 进程发起一个过程调用(功能、函数)调用后,在没得到结果之前,该调用将不会返回 | 用户进程数据等待内核数据同步 |
异步 |
进程发起一个过程调用,即便调用者不能立即得到结果,当调用却会返回 ,返回时未完成状态,当调用完成后,内核会自行通知调用者已经OK |
用户数据加载完内核数据后 内核在自行通知用户 |
I/O模型有5种:
同步阻塞 | 等待内核 进程数据 |
同步非阻塞 | 间断性主动访问内核 |
I/O复用 | select() poll()preform worker都是基于i/o复用 只是在同步非阻塞中多了一个select()用户还是要间断性访问 select()select最大打开1024 i/o第一阶段间断性访问 select第二阶段堵塞 |
事件驱动 | epoll() kqueue()event基于事件驱动第一阶段等待内核通知 第二阶段还是堵塞 内核加载完数据 会主动通知用户 边缘触发 内核加载完数据 通知一次给用户水平触发 内核加载完数据 多次通知 给用户 |
AIO(异步非阻塞) | 支持不好(文件I/O支持 网络不支持)全部内核完成 |
同步阻塞:
同步非阻塞:
I/O复用:
事件驱动:
时间: 2024-10-21 12:32:17