异步 IO 机制 io_uring

news/2024/11/9 16:45:44/

io_uring__0">一、io_uring 原理

  • 如何解决频繁 copy 的问题 → mmap 内存映射解决。
    • submit queue 中的节点和 complete queue 中的节点共用一块内存,而不是把 submit queue 中的节点 copy 到 complete queue 中
  • 如何做到线程安全 → 无锁环形队列解决。

在这里插入图片描述


io_uring__8">二、io_uring 使用


三、liburing 安装

git clone https://github.com/axboe/liburing.git
cd liburing
./configure
make
sudo make install

io_uring__tcp_server_27">四、io_uring 实现 tcp server

  • io_uringEVENT_READ 表示数据已经读出来了
  • epoll 的 EPOLLIN 表示数据可以读了
#include <stdio.h>
#include <liburing.h>
#include <netinet/in.h>
#include <string.h>
#include <unistd.h>// gcc main.c -o main -luring#define EVENT_ACCEPT   	0
#define EVENT_READ		1
#define EVENT_WRITE		2struct conn_info {int fd;int event;
};// 初始化 sockfd
int init_server(unsigned short port) {	int sockfd = socket(AF_INET, SOCK_STREAM, 0);	struct sockaddr_in serveraddr;	memset(&serveraddr, 0, sizeof(struct sockaddr_in));	serveraddr.sin_family = AF_INET;	serveraddr.sin_addr.s_addr = htonl(INADDR_ANY);	serveraddr.sin_port = htons(port);	if (-1 == bind(sockfd, (struct sockaddr*)&serveraddr, sizeof(struct sockaddr))) {		perror("bind");		return -1;	}	listen(sockfd, 10);return sockfd;
}#define ENTRIES_LENGTH		1024
#define BUFFER_LENGTH		1024int set_event_recv(struct io_uring *ring, int connfd, void *buf, size_t len, int flags) {struct io_uring_sqe *sqe = io_uring_get_sqe(ring);struct conn_info accept_info = {.fd = connfd,.event = EVENT_READ,};io_uring_prep_recv(sqe, connfd, buf, len, flags);memcpy(&sqe->user_data, &accept_info, sizeof(struct conn_info));
}int set_event_send(struct io_uring *ring, int connfd, void *buf, size_t len, int flags) {struct io_uring_sqe *sqe 

http://www.ppmy.cn/news/1424309.html

相关文章

3d模型渲染怎么会没材质---模大狮模型网

在进行3D模型渲染时&#xff0c;有时会遇到材质丢失的问题&#xff0c;这可能会给设计师们带来一些困扰。材质是渲染的重要组成部分&#xff0c;它们赋予了模型真实感和视觉吸引力。然而&#xff0c;当模型在渲染过程中出现没有材质的情况时&#xff0c;可能会导致最终效果不如…

基于SpringBoot+Vue的民宿在线预定平台(含源码数据库+文档免费送)

基于SpringBootVue的民宿在线预定平台&#xff08;含源码数据库文档免费送&#xff09; 项目视频演示&#xff1a; 基于SpringBootVue的民宿在线预定平台 开发系统:Windows10 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql8.0 数据库可视化工…

View-Consistent 3D Editing with Gaussian Splatting

View-Consistent 3D Editing with Gaussian Splatting 使用高斯溅射进行视图一致的3D编辑 Yuxuan Wang 王宇轩11Xuanyu Yi 易轩宇11Zike Wu 吴子可11Na Zhao 赵娜22Long Chen 龙宸33Hanwang Zhang 张汉旺1144 Abstract 摘要 View-Consistent 3D Editing with Gaussian Sp…

VMware配置CentOS 7 并实现ssh连接

Vmware 17下载地址 ***永久许可证&#xff1a;***5Y012-8HL8P-0J8U0-032Q6-93KKF CentOS 7 下载地址 一、配置CentOS 如下 创建新的虚拟机&#xff0c;选择典型&#xff0c;点击下一步 选择上述下载镜像存储位置&#xff0c;选择镜像&#xff0c;点击下一步 3.填写相关信息…

SpringMVC 异常没有处理,发送 /error 请求(404 错误)

现象&#xff1a; 在过滤器中进行鉴权时候抛出了异常&#xff0c;此时客户端会收到 404 错误&#xff0c;接口确定是存在&#xff0c;为什么会收到 404 错误呢&#xff1f; {"timestamp": "2024-04-16T03:12:19.83200:00","status": 404,"…

【opencv】示例-videowriter_basic.cpp从默认摄像头视频采集和录制

这段代码的功能是使用OpenCV从默认摄像头捕获视频流&#xff0c;并将这些视频流实时写入到一个名为live.avi文件中。视频流以MJPG编码格式被写入&#xff0c;帧率设置为25帧每秒。程序还会通过一个窗口实时显示摄像头捕获的画面&#xff0c;窗口标题为"Live"。用户可…

AJAX 入门到实战 第1天 2024 笔记

1.1-AJAX入门与axios使用 1.2-认识URL 1.3-查询参数 1.4-案例_地区查询 <script src"https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script><script>/*获取地区列表: http://hmajax.itheima.net/api/area查询参数:pname: 省份或直辖市…

力扣练习题(2024/4/15)

1打家劫舍 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统&#xff0c;如果两间相邻的房屋在同一晚上被小偷闯入&#xff0c;系统会自动报警。 给定一个代表每个房屋…