协程在io多路复用中的应用

阻塞式IO

在这里插入图片描述

  • socket的所有操作都由操作系统来提供,也就是通过系统调用来完成

  • 每创建一个socket,就会在文件描述符表中对应增加一条记录,而返回给应用程序的只有一个socket描述符,每个TCPsocket创建的时候,操作系统都会为它分配读缓冲区和写缓冲区

  • 要获得数据就要从读缓冲区读取过来,同样的要通过socket发送数据,就要写入些缓冲区

在这里插入图片描述

  • 当要写入的数据没有地方,或者读取的数据没有时候,就要有cpu一致在阻塞的等待,这就是阻塞式IO

在高并发场景下家具调度开销

非阻塞式IO

就是让出cpu,需要频繁的检查socket是否可读可写

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-j8UMZ9Gy-1602686263692)(gorutine.assets/image-20201014221251560.png)]

IO多路复用

将要监听的socket加入监听集合,这样就可以通过一次系统调用,同时监听多个socket,有socket就绪了,就可以逐个执行了,既不会为等待某个socket而阻塞,也不会陷入忙等待之中

在这里插入图片描述

Select IO多路复用

在这里插入图片描述

  • 打开文件描述符个数为1024个
  • 每次都要传入所有监听集合来看是否有就绪的socket
  • 每次都要便利所有集合才知道哪个socket就绪

poll IO多路复用

可打开的文件描述符个数为最多的文件描述符个数

其他依然存在

epoll IO多路复用

在这里插入图片描述

每个socke它有自己的数据结构,添加或者删除的时候都会传入一个结构体,epoll——wait等待就绪结果

问题

  • 一个socket可读,但是只读到半个socket请求,没读完

在这里插入图片描述

在这里插入图片描述
面向协程调度

  • 如果是用于监听端口的fd就绪了,就建立连接创建一个新的fd,交给一个协程来负责

在这里插入图片描述

封装

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

a...Z

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值