国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

io_uring筆記

這篇具有很好參考價(jià)值的文章主要介紹了io_uring筆記。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

io_uring 異步

要求內(nèi)核linux 5.10
異步四元組:1、init(create)2、commit 3、callback 4、destory
fio : 測(cè)iops一秒鐘讀寫(xiě)磁盤(pán)的次數(shù)

方式 磁盤(pán)iops
io_uring 11.6k
libaio 10.7k
psync 5k
spdk(內(nèi)存操作 , 盡可能都放到用戶態(tài)) 157k

io_uring 使用

io_uring內(nèi)核api:
io uring. setup();
io
uring
register();
io_ uring_ enter();

liburing接口:

  1. io_uring. _queue. init. params
  2. io_uring_prep_accept
  3. io_ uring. prep_recv
  4. io_uring_prep_send(uring, )
  5. io_ uring_submit0;
  6. io_uring wait_cqe
  7. io_uring_ peek_ batch_ cqe
  8. io_uring_cq_advance//取消事件

io_uring筆記,C++開(kāi)發(fā)后端基礎(chǔ)知識(shí),筆記
猜測(cè)運(yùn)行機(jī)制:
io_uring筆記,C++開(kāi)發(fā)后端基礎(chǔ)知識(shí),筆記
io _uring. _setup();
做兩件事
1)注冊(cè)兩個(gè)隊(duì)列
2)使用mmap映射內(nèi)核的隊(duì)列和用戶態(tài)的隊(duì)列:
io_uring筆記,C++開(kāi)發(fā)后端基礎(chǔ)知識(shí),筆記
echo_websever:

// io_uring, tcp server

// multhread, select/poll, epoll, coroutine, iouring
// reactor

// io 

#include <liburing.h>

#include <stdio.h>
#include <string.h>

#include <sys/socket.h>
#include <netinet/in.h>

#include <unistd.h>

#define ENTRIES_LENGTH		4096



enum {

	READ,
	WRITE,
	ACCEPT,

};

struct conninfo {
	int connfd;
	int type;
};


void set_read_event(struct io_uring *ring, int fd, void *buf, size_t len, int flags) {

	struct io_uring_sqe *sqe = io_uring_get_sqe(ring);

	io_uring_prep_recv(sqe, fd, buf, len, flags);

	struct conninfo ci = {
		.connfd = fd,
		.type = READ
	};

	memcpy(&sqe->user_data, &ci, sizeof(struct conninfo));

}



void set_write_event(struct io_uring *ring, int fd, const void *buf, size_t len, int flags) {

	struct io_uring_sqe *sqe = io_uring_get_sqe(ring);

	io_uring_prep_send(sqe, fd, buf, len, flags);

	struct conninfo ci = {
		.connfd = fd,
		.type = WRITE
	};

	memcpy(&sqe->user_data, &ci, sizeof(struct conninfo));

}




void set_accept_event(struct io_uring *ring, int fd,
	struct sockaddr *cliaddr, socklen_t *clilen, unsigned flags) {

	struct io_uring_sqe *sqe = io_uring_get_sqe(ring);

	io_uring_prep_accept(sqe, fd, cliaddr, clilen, flags);

	struct conninfo ci = {
		.connfd = fd,
		.type = ACCEPT
	};

	memcpy(&sqe->user_data, &ci, sizeof(struct conninfo));

}


int main() {

	int listenfd = socket(AF_INET, SOCK_STREAM, 0);  // 
    if (listenfd == -1) return -1;
// listenfd
    struct sockaddr_in servaddr, clientaddr;
    servaddr.sin_family = AF_INET;
    servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
    servaddr.sin_port = htons(9999);

    if (-1 == bind(listenfd, (struct sockaddr*)&servaddr, sizeof(servaddr))) {
            return -2;
    }
	
	listen(listenfd, 10);

	struct io_uring_params params;
	memset(&params, 0, sizeof(params));

// epoll --> 
	struct io_uring ring;
	io_uring_queue_init_params(ENTRIES_LENGTH, &ring, &params);

	socklen_t clilen = sizeof(clientaddr);
	set_accept_event(&ring, listenfd, (struct sockaddr*)&clientaddr, &clilen, 0);
	
	char buffer[1024] = {0};
//
	while (1) {

		struct io_uring_cqe *cqe;//從sqe地址復(fù)制地址
		
		io_uring_submit(&ring) ; //提交,在這個(gè)階段進(jìn)行accpet和recv、write等

		int ret = io_uring_wait_cqe(&ring, &cqe); //回調(diào)

		struct io_uring_cqe *cqes[10];
		int cqecount = io_uring_peek_batch_cqe(&ring, cqes, 10);// 10是每次最多返回10個(gè)隊(duì)列元素
		int i = 0;
		unsigned count = 0;
		
		for (i = 0;i < cqecount;i ++) {

			cqe = cqes[i];
			count ++;

			struct conninfo ci;
			memcpy(&ci, &cqe->user_data, sizeof(ci));

			if (ci.type == ACCEPT) {

				int connfd = cqe->res;
				
				set_read_event(&ring, connfd, buffer, 1024, 0);

			} else if (ci.type == READ) {

				int bytes_read = cqe->res;
				if (bytes_read == 0) {
					close(ci.connfd);
				} else if (bytes_read < 0) {

				} else {
					
					printf("buffer : %s\n", buffer);
					set_write_event(&ring, ci.connfd, buffer, bytes_read, 0);
				}
			} else if (ci.type == WRITE) {

				set_read_event(&ring, ci.connfd, buffer, 1024, 0);

			}
			

		}
		
		io_uring_cq_advance(&ring, count);
	}
	

}

對(duì)比于epoll的效果

io_uring筆記,C++開(kāi)發(fā)后端基礎(chǔ)知識(shí),筆記
io_uring筆記,C++開(kāi)發(fā)后端基礎(chǔ)知識(shí),筆記
都采用echo_websever:
epoll: 60w
io_uring: 65w

io_uring效果好在哪?

epoll是把io放入了紅黑樹(shù)
io_uring共享內(nèi)存:存儲(chǔ)空間、修改變量文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-636548.html

到了這里,關(guān)于io_uring筆記的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Flask后端開(kāi)發(fā)(一)-基礎(chǔ)知識(shí)和前期準(zhǔn)備

    目錄 1.背景介紹 1.1. 項(xiàng)目背景 1.2. 項(xiàng)目難點(diǎn) 1.3. 項(xiàng)目環(huán)境 2. flask后端開(kāi)發(fā)實(shí)現(xiàn)的功能 3. flask部署和前后端對(duì)接 3.1. flask運(yùn)行配置和服務(wù)器部署 3.2. flask前后端傳參 4. 后端測(cè)試工具 4.1. 工具介紹 4.2. 工具使用 后記 就是前幾個(gè)月臨時(shí)接手了一個(gè)后端項(xiàng)目,使用python flask框架進(jìn)行后

    2024年02月08日
    瀏覽(29)
  • JAVA后端開(kāi)發(fā)面試基礎(chǔ)知識(shí)(一)——JVM

    Class loader(類裝載) 根據(jù)給定的全限定名類名(如: java.lang.Object)來(lái)裝載class文件到 Runtime data area中的method area。 Execution engine(執(zhí)行引擎) 執(zhí)行classes中的指令。 Native Interface(本地接口) 與native libraries交互,是其它編程語(yǔ)言交互的接口。 Runtime data area(運(yùn)行時(shí)數(shù)據(jù)區(qū)域) 這就是我們常說(shuō)

    2024年03月10日
    瀏覽(21)
  • JAVA后端開(kāi)發(fā)面試基礎(chǔ)知識(shí)(八)——Spring

    JAVA后端開(kāi)發(fā)面試基礎(chǔ)知識(shí)(八)——Spring

    Spring是一個(gè)輕量級(jí)Java開(kāi)發(fā)框架 我們一般說(shuō) Spring 框架指的都是 Spring Framework,它是很多模塊的集合,使用這些模塊可以很方便地協(xié)助我們進(jìn)行開(kāi)發(fā),比如說(shuō) Spring 支持 IoC(Inverse of Control:控制反轉(zhuǎn)) 和 AOP(Aspect-Oriented Programming:面向切面編程)、可以很方便地對(duì)數(shù)據(jù)庫(kù)進(jìn)行訪問(wèn)、

    2024年03月10日
    瀏覽(24)
  • web開(kāi)發(fā)學(xué)習(xí)筆記(10.postman請(qǐng)求響應(yīng),后端接口基礎(chǔ)知識(shí))

    web開(kāi)發(fā)學(xué)習(xí)筆記(10.postman請(qǐng)求響應(yīng),后端接口基礎(chǔ)知識(shí))

    1.springboot使用get請(qǐng)求接受簡(jiǎn)單參數(shù) 上述寫(xiě)法不去別get或者post請(qǐng)求 2.postman各種提交方式的區(qū)別 1、form-data:? ? ? ? ? ? ? ? ? ? ?就是http請(qǐng)求中的 multipart/form-data ,它會(huì)將表單的數(shù)據(jù)處理為一條消息,以標(biāo)簽為單元,用分隔符分開(kāi)。既可以上傳鍵值對(duì),也可以上傳文件。當(dāng)上傳

    2024年01月20日
    瀏覽(24)
  • 后端必會(huì)的前端vue基礎(chǔ)知識(shí)

    build ------前端工程webpack構(gòu)建設(shè)置 config ------ 前端工程構(gòu)建參數(shù)設(shè)置(index.js 打包) src ---- 項(xiàng)目代碼 ????????api ---- 服務(wù)端口請(qǐng)求 ? ? ? ? assets ---- 項(xiàng)目靜態(tài)文件、圖片 ? ? ? ? coponents ---- 項(xiàng)目自定義組件 ? ? ? ? mock ----- 模擬數(shù)據(jù) ? ? ? ? router ----- 項(xiàng)目路由配置 ? ? ?

    2024年01月20日
    瀏覽(18)
  • Nodejs后端架構(gòu)基礎(chǔ)知識(shí)和案例展示

    Nodejs后端架構(gòu)基礎(chǔ)知識(shí)和案例展示

    入門(mén)筆記,大神請(qǐng)繞路?。?! 簡(jiǎn)單的說(shuō) Node.js 就是運(yùn)行在服務(wù)端的 JavaScript。 Node.js 是一個(gè)基于Chrome JavaScript 運(yùn)行時(shí)建立的一個(gè)平臺(tái)。 Node.js是一個(gè)事件驅(qū)動(dòng)I/O服務(wù)端JavaScript環(huán)境,基于Google的V8引擎,V8引擎執(zhí)行Javascript的速度非常快,性能非常好。 優(yōu)點(diǎn): 1.高并發(fā) (高并發(fā)的

    2023年04月11日
    瀏覽(18)
  • Unity2D RPG開(kāi)發(fā)筆記 P1 - Unity界面基礎(chǔ)操作和知識(shí)

    Unity2D RPG開(kāi)發(fā)筆記 P1 - Unity界面基礎(chǔ)操作和知識(shí)

    按下 QWERTY 可以選擇不同的工具進(jìn)行 旋轉(zhuǎn)、定位、縮放 按下 Ctrl + D 可以復(fù)制物體 16:9 為最常見(jiàn)的分辨率 Transform 組件 物體在空間中的位置、縮放、旋轉(zhuǎn) 點(diǎn)擊這里可以進(jìn)行 reset 操作,位置將會(huì)被重置 不知道算不算冷知識(shí)的冷知識(shí):鼠標(biāo)拖動(dòng)這里可以移動(dòng)該數(shù)值 Sprite Renderer

    2024年02月13日
    瀏覽(14)
  • IO + File 詳細(xì)基礎(chǔ)知識(shí)

    IO + File 詳細(xì)基礎(chǔ)知識(shí)

    全面解析Java-IO流 File: 表示系統(tǒng)中的文件或者文件夾的路徑。 利用File我們可以獲取文件信息(大小,文件名,修改時(shí)間)、判斷文件的類型、創(chuàng)建文件/文件夾、刪除文件/文件夾等 File類只能對(duì)文件本身進(jìn)行操作,不能讀寫(xiě)文件里面存儲(chǔ)的數(shù)據(jù)。 存儲(chǔ)和讀取數(shù)據(jù)的解決方案

    2024年02月04日
    瀏覽(24)
  • Java-IO流基礎(chǔ)知識(shí)

    Java-IO流基礎(chǔ)知識(shí)

    目錄 1.File類與路徑知識(shí) 1.File類 2.Java中的路徑知識(shí) 3.創(chuàng)建File類的實(shí)例 4.File類的方法使用 5.File類使用的注意點(diǎn) 2.IO流知識(shí) 1.IO流原理 2.文件的讀入 3.read()的重載方法:難點(diǎn) 4.文件的寫(xiě)出 1.寫(xiě)出的說(shuō)明 2.寫(xiě)出操作的具體步驟 5.文件的復(fù)制:先讀出在寫(xiě)入 6.字節(jié)流FileInputStream和Fi

    2024年02月09日
    瀏覽(51)
  • iOS設(shè)備和藍(lán)牙模塊連接基礎(chǔ)知識(shí)

    iOS設(shè)備和藍(lán)牙模塊連接基礎(chǔ)知識(shí)

    iOS設(shè)備和藍(lán)牙模塊連接基礎(chǔ)知識(shí) 一:iOS連接外設(shè)的幾種方式 如圖下面幾種方式: CoreBluetooth和ExternalAccessory,兩個(gè)框架,基本上是藍(lán)牙設(shè)備與iOS設(shè)備連接的方式 有圖可知,EAP要MFi認(rèn)證,要求設(shè)備的設(shè)計(jì)理念符合蘋(píng)果的要求,不僅可以進(jìn)行無(wú)線藍(lán)牙通信,還可以進(jìn)行有線通信(

    2023年04月20日
    瀏覽(33)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包