Linux网络I/O模型整理

Linux的内核将所有外部设备都看作一个文件来操作,对一个文件的读写操作会调用内核的系统命令,返回一个fd(file descriptor),对于socket则对应为socket描述符,描述符就是一个数字,指向内核中的一个结构体(文件路径、数据区等)。
根据对I/O模型的分类,linux提供了5种I/O模型。包括阻塞I/O模型、非阻塞I/O模型、I/O复用模型、信号驱动I/O模型、异步I/O。下面将一一介绍。

阻塞I/O模型

阻塞I/O模型
进程从调用recvfrom开始到返回的整段时间内都是被阻塞的。

非阻塞I/O模型

非阻塞I/O模型

I/O复用模型

select/poll机制实现,进程通过将一个或多个fd传递给select或poll系统调用,阻塞在select操作上,这样select/poll可以侦测多个fd是否处于就绪状态。select/poll是顺序扫描fd是否就绪,支持的fd数量有限。
epoll使用基于事件驱动方式代替顺序扫描,性能更高,当有fd就绪时,立即回调函数rollback。
i/o复用模型

信号驱动I/O模型

信号驱动io模型
首先开启信号驱动I/O功能,通过调用sigaction执行一个信号处理函数(此系统调用立即返回,进程继续工作,非阻塞的)。当数据准备就绪时,就为该进程生成一个SIGIO信号,通过信号回调通知应用程序调用recvfrom来读取数据。

异步I/O模型

异步io模型
告知内核启动某个操作。与信号驱动I/O的主要区别是:信号驱动I/O由内核通知我们何时可以开始一个I/O操作;异步I/O模型由内核通知我们I/O操作何时已经完成。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值