I/O复用

简介:

I/O复用的场合:

1 客户处理多个描述字时

2 客户处理多个套接口

3 服务器处理监听套接口,又要处理已连接套接口

4 既处理TCP,又处理UDP

5 处理多个服务或者多个协议

套接口上的输入操作:

1 数据到达网络,分组到达时,被拷贝到内核的某个缓冲区

2 将数据从内核缓冲区拷贝到应用缓冲区

非阻塞模型,应用进程连续不断的查询内核,看看某操作是否准备好。这对CPU时间是极大的浪费。

I/O复用,调用select或pool,调用某一个阻塞

通过系统调用sigaction安装信号处理程序,当数据准备好时,就生成一个SIGIO信号,调用recvfrom读取数据报

异步IO模型

调用函数aio_read传递给内核相关信息,内核数据拷贝完成后,返回信号

select()函数:

允许进程指示内核等待多个事件中的任一个发生,并仅在一个或多个时间发生或经过某指定的事件后才唤醒进程。

套接口准备读:

1 接收缓冲区中的数据字节数大于等于套接口接收缓冲区低潮限度的当前值

2 连接的读这一半关闭

3 套接口是一个监听套接口且已完成的连接数为非0

4 有一个套接口错误待处理

套接口准备写:

1 发送缓冲区中的可用字节数大于等于套接口发送缓冲区低潮限度的当前值,且或 套接口已连接,套接口不要求连接

2 连接的写这一半关闭

3 有一个套接口错误待处理

接收和发送低潮限度的目的:

在select返回之前,应用进程知道有多少出具可读或有多大的空间可用于写

使用shutdown相对于cloose的好处:

1 close将描述字的计数减1,在此计数为0时才关闭套接口。用shutdown激发TCP正常连接终止序列,不管访问计数

2 close终止了数据传送两个方向:读和写。

使用shutdown半关闭连接:

int shutdown(int sockfd,int howto);

howto类型:

1 SHUT_RD 关闭连接读的这一半,不再接受数据,现有的都作废。

2 SHUT_WR 关闭连接的写的这一半,当前缓冲区的数据都被发送,后跟正常的TCP终止序列。

3 SHUT_RDWR 连接的读这一半,和写这一半都关闭。相当于两次shutdown

拒绝服务型攻击:

当一个服务器整处理多个客户时,服务器不能阻塞于单个客户相关的函数调用。如果这样,服务器将悬挂并拒绝为所有其他的客户提供服务。

本文转自博客园xingoo的博客,原文链接:I/O复用,如需转载请自行联系原博主。

相关文章
|
1天前
|
数据采集 人工智能 安全
|
10天前
|
云安全 监控 安全
|
2天前
|
自然语言处理 API
万相 Wan2.6 全新升级发布!人人都能当导演的时代来了
通义万相2.6全新升级,支持文生图、图生视频、文生视频,打造电影级创作体验。智能分镜、角色扮演、音画同步,让创意一键成片,大众也能轻松制作高质量短视频。
882 150
|
15天前
|
机器学习/深度学习 人工智能 自然语言处理
Z-Image:冲击体验上限的下一代图像生成模型
通义实验室推出全新文生图模型Z-Image,以6B参数实现“快、稳、轻、准”突破。Turbo版本仅需8步亚秒级生成,支持16GB显存设备,中英双语理解与文字渲染尤为出色,真实感和美学表现媲美国际顶尖模型,被誉为“最值得关注的开源生图模型之一”。
1620 8
|
6天前
|
人工智能 前端开发 文件存储
星哥带你玩飞牛NAS-12:开源笔记的进化之路,效率玩家的新选择
星哥带你玩转飞牛NAS,部署开源笔记TriliumNext!支持树状知识库、多端同步、AI摘要与代码高亮,数据自主可控,打造个人“第二大脑”。高效玩家的新选择,轻松搭建专属知识管理体系。
362 152
|
7天前
|
人工智能 自然语言处理 API
一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸
一句话生成拓扑图!next-ai-draw-io 结合 AI 与 Draw.io,通过自然语言秒出架构图,支持私有部署、免费大模型接口,彻底解放生产力,绘图效率直接爆炸。
588 152
|
9天前
|
人工智能 安全 前端开发
AgentScope Java v1.0 发布,让 Java 开发者轻松构建企业级 Agentic 应用
AgentScope 重磅发布 Java 版本,拥抱企业开发主流技术栈。
546 13
|
2天前
|
编解码 人工智能 机器人
通义万相2.6,模型使用指南
智能分镜 | 多镜头叙事 | 支持15秒视频生成 | 高品质声音生成 | 多人稳定对话