一次性了解I/O模型及select/poll/epoll的区别

1 篇文章 0 订阅

I/O模型

io模型
以上是我的学习笔记,讲的其实很细了,另外对于信号驱动IO,异步IO,稍微做个补充吧。(用的不多,但还是大概知道下,不然我就是标题党了)

信号驱动IO:

  1. 应用进程用 sigaction 系统调用内核会立即返回,应用进程可以继续执行,也就是说等待数据阶段应用进程是非阻塞的。
  2. 内核在数据到达时向应用进程发送 SIGIO 信号,应用进程收到之后在信号处理程序中调用 recvfrom 将数据从内核复制到应用进程中。信号驱动 I/O 的 CPU 利用率很高。
  3. 通俗的讲就是,应用程序先调用,内核直接返回,这时还没做传数据的操作,是非阻塞的。然后内核找到数据也准备好了,就向应用程序发个信号,应用程序接到信号就去调函数把内核准备好的数据复制过来,这样就完成了信号驱动IO了,其实就是一些过程的不同,不用太纠结。

异步IO:

  1. 应用进程执行 aio_read 系统调用会立即返回,应用进程可以继续执行,不会被阻塞,内核会在所有操作完成之后向应用进程发送信号
  2. 异步 I/O 的信号是通知应用进程 I/O 来完成的

我们的I/O模型出现很多次recvfrom这个函数,那它是干嘛的呢?
recvfrom()是用来接收远程主机经指定的socket传来的数据,并把数据传到由buf指向的内存空间。
它是一个接收函数,用它完成内核的数据复制到用户空间的这么一个功能。一般由应用程序(用户空间)来调用。

在这里插入图片描述
这是一张关于I/O模型的英文版流程老图,看不懂也没关系,理解了上面讲的再看这图就懂了。


下个环节——select/poll/epoll的区别

在这里插入图片描述
题外话:对于多路复用I/O,redis用的很牛了,一个线程处理每秒百万级的并发,而且速度毫不逊色,以后有时间写点redis的知识。

笔记参上!观众老爷们觉得写的还不错的记得点点关注😘

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值