libmain.so是什么(somali是什么意思)

libmain.so是什么(somali是什么意思)io uring 是 linux 内核中高效的异步 I O 框架 Linux 内核 5 1 引入 用于提高 I O 的性能 liburing 是基于 io uring 封装的库 提供更简洁的 api 1 应用程序将 I O 请求提交到提交队列中 每个请求可以理解为提交队列中的一个节点 SQE 2 内核处理 3 当 I O 操作完成

大家好,我是讯享网,很高兴认识大家。



1、应用程序将I/O请求提交到提交队列中,每个请求可以理解为提交队列中的一个节点(SQE)。

2、内核处理。

3、当I/O操作完成,内核将结果放到完成队列中,每个结果为完成队列中的一个节点(CQE)。

异步操作:
io_uring允许用户将I/O操作提交给内核,内核在后台异步处理这些操作。用户不需要等待操作完成,而是可以在稍后查询完成队列以获取操作结果。

举例:

应用程序要做的就是往请求队列中抛任务,从完成队列中取结果。

原理图:


讯享网

问题描述:每个任务频繁添加到请求队列,这里会有频繁的拷贝过程?

用户空间和内核之间共享一块内存区域,用于传递提交的I/O请求和完成的I/O请求事件,使用了mmap映射内存来避免频繁拷贝,所以不需要拷贝。

对于io_uring的队列来说,多线程操作不需要加锁,io_uring使用了无锁环形队列,支持多个线程可以安全且高效的并发处理I/O请求。

io_uring提供了3个系统函数,io_uring_setup,io_uring_enter,io_uring_register。liburing对其封装了一层。liburing主要函数介绍:
io_uring_queue_init_params
初始化io_uring环境,包括初始化提交队列(SQ)和完成队列(CQ),内部会调用io_uring_setup

io_uring_prep_*系列函数

、、、 等,将I/O操作放到提交队列中

io_uring_submit

将提交队列中的操作提交给内核,触发内核执行操作,内部依赖io_uring_enter系统调用

io_uring_wait_cqe
阻塞等待至少一个操作完成,并返回完成的CQE,这一步是阻塞的

io_uring_peek_batch_cqe

批量获取完成队列中的操作结果, 返回值表示已经完成的操作数量

io_uring_cq_advance

这个函数通知io_uring,应用程序已经处理完这些事件,可以从完成队列中释放了

  io_uring只是个异步I/O框架,可以处理网络通信(socket),也可以处理文件操作(读写文件)等      epoll专门用于处理网络通信(socket)

io_uring可以批量提交多个I/O操作,然后一次性等待他们的完成,大大的减少了系统调用的数量。

io_uring利用共享内存在用户空间和内核空间传递数据,减少了频繁的拷贝。
epoll使用时需要多次系统调用,例如:epoll_ctrl注册或修改文件描述符事件
epoll每次等待事件,都需要从用户空间切换到内核空间。

 

讯享网

学习链接:https://github.com/0voice

小讯
上一篇 2025-05-02 22:19
下一篇 2025-05-10 23:52

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/190497.html