当前位置:网站首页 > AI与大数据 > 正文

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



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

到此这篇libmain.so是什么(somali是什么意思)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • ai人群和pl人群是什么意思(品牌ai人群是什么意思)2024-12-18 20:27:04
  • aipl人群是什么意思(aipl人群定义)2024-12-18 20:27:04
  • faiss(Fais什么意思)2024-12-18 20:27:04
  • aippt免费生成下载(ppt制作免费下载)2024-12-18 20:27:04
  • faiss数据库的结构(数据库stuff)2024-12-18 20:27:04
  • 电路中ga是什么意思(gain在电路中是什么意思)2024-12-18 20:27:04
  • faiss(Faissal名字)2024-12-18 20:27:04
  • aiplaza怎么读(aizo怎么读)2024-12-18 20:27:04
  • faiss是什么(fas是什么意思的缩写)2024-12-18 20:27:04
  • QPainter绘制图片 放大(qpainter绘图效率)2024-12-18 20:27:04
  • 全屏图片