计算机网络 | 五种I/O模型

简介: 计算机网络 | 五种I/O模型

阻塞I/O

①当上层应用app1调用recv系统调用时,如果对等方没有发送数据(缓冲区没有数据),上层应用app1将阻塞(默认行为,被linux内核阻塞);

②当对等方发送了数据,linux内核recv端缓冲区,有数据后,内核会把数据copy给用户空间。然后上层应用app1解除阻塞,执行下一步操作。

非阻塞I/O

①上层应用程序app2将套接字设置成非阻塞模式。

②上层应用程序app2轮询调用recv函数,接受数据。若缓冲区没有数据,上层程序app2不会阻塞,recv返回值为-1,错误码是EWOULDBLOCK

③上层应用程序不断轮询有没有数据到来。会造成上层应用忙等待。大量消耗CPU。很少直接用。应用范围小,一般和selectIO复用配合使用。

I/O复用

①上层应用程序app3调用select机制(该机制有linux内核支持,避免了app3忙等待。),进行轮询文件描述符的状态变化。

②当select管理的文件描述符没有数据(或者状态没有变化时),上层应用程序app3也会阻塞。

③好处select机制可以管理多个文件描述符

select可以看成一个管理者,用select来管理多个IO。

一旦检测到的一个I/O或者多个IO,有我们感兴事件,发生,select函数将返回,返回值为检测到的事件个数。进而可以利用select相关api函数,操作具体事件。

⑤select函数可以设置等待时间,避免了上层应用程序app3,长期僵死。

⑥和阻塞IO模型相比,selectI/O复用模型相当于提前阻塞了。等到有数据到来时,再调用recv就不会发生阻塞。整个系统性(app和linux内核协议栈配合更好了)能优化、提供了。

信号驱动I/O

① 上层应用程序app4建立SIGIO信号处理程序。当缓冲区有数据到来,内核会发送信号告诉上层应用程序app4。

②上层应用程序app4接收到信号后,调用recv函数,因缓冲区有数据,recv函数一般不会阻塞。

③这种用于模型用的比较少,属于典型的“拉模式”。即:上层应用app4,需要调用recv函数把数据拉进来。

异步I/O

①上层应用程序app5调用aio_read函数,同时提交一个应用层的缓冲区buf;调用完毕后,不会阻塞。上层应用程序app5可以继续其他任务。

②当tcpip协议缓冲区有数据时,linux主动的把内核数据copy到用户空间。然后再给上层应用app5发送信号;告诉app5数据有了,赶快处理吧。

③典型的“推模式”。

④ 效率最高的一种形式,上层应用程序app5有异步处理的能力(在linux内核的支持下,言外之意:处理其他任务的同时,也可支持IO通讯)。

...

相关文章
|
1天前
|
机器学习/深度学习 数据可视化 Python
R语言神经网络模型预测多元时间序列数据可视化
R语言神经网络模型预测多元时间序列数据可视化
|
2天前
|
机器学习/深度学习 数据可视化
R语言用灰色模型 GM (1,1)、神经网络预测房价数据和可视化
R语言用灰色模型 GM (1,1)、神经网络预测房价数据和可视化
10 1
|
2天前
|
机器学习/深度学习 算法 TensorFlow
TensorFlow 2keras开发深度学习模型实例:多层感知器(MLP),卷积神经网络(CNN)和递归神经网络(RNN)
TensorFlow 2keras开发深度学习模型实例:多层感知器(MLP),卷积神经网络(CNN)和递归神经网络(RNN)
|
2天前
|
数据可视化 算法 数据挖掘
R语言SIR模型网络结构扩散过程模拟SIR模型(Susceptible Infected Recovered )代码实例
R语言SIR模型网络结构扩散过程模拟SIR模型(Susceptible Infected Recovered )代码实例
|
2天前
|
机器学习/深度学习 算法 数据可视化
MATLAB基于深度学习U-net神经网络模型的能谱CT的基物质分解技术研究
MATLAB基于深度学习U-net神经网络模型的能谱CT的基物质分解技术研究
|
2天前
|
负载均衡 网络协议 数据安全/隐私保护
NewH3C—计算机网络概述、模型
NewH3C—计算机网络概述、模型
|
4天前
|
机器学习/深度学习 存储 算法
r语言中对LASSO回归,Ridge岭回归和弹性网络Elastic Net模型实现(下)
r语言中对LASSO回归,Ridge岭回归和弹性网络Elastic Net模型实现
18 2
|
4天前
|
机器学习/深度学习 运维 算法
R语言用ARIMA模型滑动时间窗口识别网络流量时间序列异常值
R语言用ARIMA模型滑动时间窗口识别网络流量时间序列异常值
10 0
|
4天前
|
机器学习/深度学习 编解码 算法
R语言用FNN-LSTM假近邻长短期记忆人工神经网络模型进行时间序列深度学习预测4个案例
R语言用FNN-LSTM假近邻长短期记忆人工神经网络模型进行时间序列深度学习预测4个案例
|
5天前
|
存储 NoSQL Linux
Redis入门到通关之Redis5种网络模型详解
Redis入门到通关之Redis5种网络模型详解
20 1