广州个人网站制作apache 建立网站
news/
2025/9/28 0:00:11/
文章来源:
广州个人网站制作,apache 建立网站,flash xml网站,html用什么编译器编写阻塞式IO与非阻塞IO的区别 1. 阻塞式IO (Blocking I/O) 定义 当程序发起一个I/O操作#xff08;如读取文件、网络数据#xff09;时#xff0c;进程会被挂起#xff08;阻塞#xff09;#xff0c;直到操作完成或超时才会继续执行后续代码。在此期间#xff0c;程序无法…阻塞式IO与非阻塞IO的区别 1. 阻塞式IO (Blocking I/O) 定义 当程序发起一个I/O操作如读取文件、网络数据时进程会被挂起阻塞直到操作完成或超时才会继续执行后续代码。在此期间程序无法执行其他任务。 工作流程 python 复制 data socket.recv() # 调用recv()后程序卡在这里等待数据
print(收到数据:, data) # 数据到达后才会执行 特点 优点编程简单代码直观。 缺点资源利用率低等待期间CPU空闲不适合高并发场景。 典型场景 简单的单线程脚本 对实时性要求不高的低频操作如命令行工具 2. 非阻塞式IO (Non-blocking I/O) 定义 程序发起I/O操作后立即返回无需等待结果。可以通过轮询或事件通知机制如select/epoll检查操作状态实现并发处理多个I/O。 工作流程 python 复制 socket.setblocking(False) # 设置为非阻塞模式
try:data socket.recv() # 立即返回若有数据则返回数据否则抛异常print(收到数据:, data)
except BlockingIOError:print(暂时无数据继续处理其他任务) # 程序继续执行其他逻辑 特点 优点提高CPU利用率支持高并发如同时处理数千连接。 缺点编程复杂需配合多路复用或回调机制。 典型场景 Web服务器Nginx、Node.js 实时通信系统WebSocket、游戏服务器 3. 核心区别
维度阻塞式IO非阻塞式IO行为调用后卡住直到I/O完成调用后立即返回需主动查询状态CPU利用率低等待期间闲置高可并行处理其他任务并发能力弱依赖多线程/进程强单线程即可处理大量I/O实现复杂度简单复杂需搭配多路复用或异步框架适用场景低频、简单任务高频、高并发场景 4. 技术实现
阻塞式IO示例C语言
c
复制
int fd open(file.txt, O_RDONLY);
char buf[1024];
read(fd, buf, sizeof(buf)); // 阻塞在此直到数据读取完毕
printf(Data: %s\n, buf);
非阻塞式IO示例C语言
c
复制
int fd open(file.txt, O_RDONLY | O_NONBLOCK); // 设置非阻塞标志
char buf[1024];
while (1) {ssize_t n read(fd, buf, sizeof(buf));if (n 0) {printf(Data: %s\n, buf);break;} else if (n -1 errno EAGAIN) {// 数据未就绪处理其他任务usleep(1000); }
} 5. 如何选择 选阻塞式IO 开发简单快速的小工具。 无需高并发如本地配置文件读取。 选非阻塞IO 高并发服务器如Web服务、实时聊天。 需要最大限度利用CPU资源的场景。 6. 扩展同步 vs 异步IO 同步IO程序主动等待I/O结果阻塞式、非阻塞式均属此类。 异步IO程序发起I/O后无需等待操作系统完成后主动通知如Linux的io_uring、Windows的IOCP。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/920104.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!