前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >I/O模型分类

I/O模型分类

作者头像
学徒漠筱歌
发布2022-07-17 10:26:03
发布2022-07-17 10:26:03
1550
举报
文章被收录于专栏:ZMHZMH

在学习I/O模型的学习总结,如有错误,不吝指正(^.^)

I/O复用场景:

当客户处理多个描述字时;

一个客户处理多个套接口;

一个TCP服务器既要处理监听套接口,又要处理已连接套接口;

一个服务器既要处理TCP,又要处理UDP;

如果一个服务器处理多个服务或多个协议;

一个输入操作分为:

等待数据准备好(等待数据到达,然后拷贝到内核的缓冲区);

从内核到进程拷贝数据(从内核缓冲区拷贝到应用缓冲区);

阻塞I/O模型:

函数调用阻塞至数据到达且拷贝到应用缓冲区,或者出错时返回(如信号中断);

非阻塞I/O模型:

函数调用若内核无数据准备好返回EWOULDBLOCK错误,若内核数据准备好则将数据拷贝到应用缓冲区,返回成功指示;

I/O复用模型:

阻塞在select或poll模型,而非真正的I/O系统调用阻塞,等待数据报套接口可读时调用读操作函数拷贝数据到应用缓冲区。其中使用两次系统调用,好处是可以等待多个描述字准备好;

信号驱动I/O模型:

先允许套接口进行信号驱动I/O(UNIX v1 22.2),并通过系统调用sigaction安装一个信号处理程序,当数据报准备好被读时就为该进程生成一个SIGIO信号,随后可以在信号处理程序调用函数读取数据(内核缓冲区到应用缓冲区),并通知主循环程序。

异步I/O模型:

当整个过程完成后通知我们,包括将数据从内核缓冲区拷贝到应用缓冲区,与信号驱动I/O不同的是前者是在完成时通知,后者是在开始时通知。

区别:

前四种主要在第一阶段不同,在第二阶段相同(从内核缓冲区拷贝到应用缓冲区时仍然阻塞),异步I/O处理的两个阶段都不同于前四种,因此前四种都属于同步I/O。

大家发现要改正或改进的地方留个言啦

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016-11-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档