当前位置: 首页 > news >正文

io的异步处理io_uring,实现io_uring_tcp_server

一、什么是异步?有哪些场景是异步?如何做到异步?

异步是对于两个事物的关系

io的检测 与 读写数据

读写数据 与 数据解析

比如:

客户端只管发送请求,这样可以并发多条请求,哪条请求有了响应再返回结果,这样客户端界面就不至于等一个请求有了响应再发起另一个请求(串行),界面不卡顿,提高用户体验

服务端对IO的处理往往比较耗时,可以把数据读写 与 数据处理做成异步,比如主线程只负责数据的读写,置于数据如何解析、响应可以抛到线程池处理,等有了结果再返回。这就大大减少了读完数据,还要等待数据解析、处理的时间。

read() write() recv() send()这些函数都是同步

比如read()   读取请求  ---  返回数据 

那如何把a_read做成异步?

调用a_read,只发起读取请求,可以把请求放到一个任务队列(sqe)

work负责从任务队列取数据,执行,把结果放到结果队列(cqe) (线程池)

while(1)不断从cqe取结果(子线程)

注:

1.把task加到sqe会涉及频繁copy,可以通过mmap,把用户空间与内核空间做映射,避免copy

2.如何做到线程安全?

加锁是一种方案,但是效率不高

可以用无锁队列(环形队列),如:不断对100取模

内存是连续的,逻辑上是环形的

二、什么是io_uring?和epoll有什么区别?

io_uring 也是linux内核提供的,不过实现的是IO的异步处理

主要包含三个系统调用:

io_uring_setup    ----  创建环形队列(含mmap),sqe、cqe是一块内存、节点共享

io_uring_register --- 往sqe添加节点

io_uring_entry --- 把sqe所有节点交由内核

内核处理请求,返回结果到cqe

这三个系统调用被封装到了liburing的库中

区别在于:

epoll 需要管理的event只要放到总集,就不用再重复添加

io_uring 把请求放到sqe,内核对请求的操作是消耗性的,处理完,请求就不在sqe了;若想重复监控,就需要重复set

io_uring 中 EVENT_READ --- 数据已经读完了

epoll 中 EPOLLIN --- 数据可读

三、如何是实现一个io_uring_tcp_server?

1.初始化socket(create、bind、listen)

2.把accept、recv、send做成异步:

io_uring_setup  --- io_uring_queue_init_params --- 创建sqe、cqe环形队列(含mmap)

io_uring_register --- io_uring_prep_accept等 --- 请求放到sqe

io_uring_entry --- io_uring_submit --- 把sqe中所有请求交由内核

内核接受到请求,立即处理,结果放到cqe

io_uring_peek_batch_cqe ---- 从cqe取结果

3.set_event_accept等对io_uring_prep_accept二次封装,添加event  fd、sttatus控制。

后续根据不同的status,进行不同的处理,如,往sqe添加节点(set_event_rev等)

注:逻辑上而言:EVENT_READ --- 数据已经读完了。

因为EVENT_READ 定位在 set_event_recv 中,它实现了数据接收,并设置event状态。

具体代码实现如下:

set_event_accept、set_event_recv、set_event_send的封装

初始化socket(create、bind、listen)

setup环形队列(sqe、cqe)、register添加节点、entry交由内核处理

根据event状态,不同处理

http://www.dtcms.com/a/424649.html

相关文章:

  • 网站分享平台免费制作网络商城网站
  • 网站开发费用会计分录做好档案整理及网站建设
  • webpack学习
  • 做360网站快速排名软件10分钟免费建网站
  • 找人做网站毕业设计聚美优品网站建设分析
  • YOLO入门教程(番外):为什么激活函数如此关键。
  • 东营网站建设课程定位优化品牌设计网站大全
  • wordpress建站seo商城网站 搭建
  • 手机网站设计教育类模板wordpress 当前用户所有评论
  • 宝塔 crontab 开机启动任务位置
  • 天津企业模板建站网站主页设计注意点
  • spyglass waive使用
  • SAMCO与印度理工学院德里分校签署合作备忘录
  • 简洁大气企业网站源码金华建站方案
  • LeetCode每日一题——重复的子字符串
  • 设计师网站资源网站开发参考资料
  • 网站seo主要是做什么的淄博网站制作设计定制
  • 5G NR-NTN协议学习系列:NR-NTN介绍(4)
  • [5G通讯壳]基于V1.8系统批量发送短信插件
  • 网站论坛制作唐山万唯网络科技有限公司
  • 肇庆制作网站软件洛阳网络公司
  • 国外网站建设什么价格低桂阳做网站的软件定制开发外包
  • gps建站步骤优秀网站的特点
  • 表单提交404错误详细整理,错误URL
  • 做网站开发用什么APP好网站seo优化外包顾问
  • 微服务项目->在线oj系统(Java-Spring)---分页功能
  • 北京网站优化哪家好做网站的主营业务
  • 飞牛Nas 部署gitea 并迁移新机器及备份
  • 怎样做网贷网站wordpress参考
  • 方法的定义注意点