[英]io_uring: io_uring_wait_cqe_nr, io_uring_peek_batch_cqe
我想在github項目上試驗io_uring: https ://github.com/alexhultman/io_uring_epoll_benchmark
參考: https ://unixism.net/loti/ref-liburing/completion.html
但是我偶然發現了兩個功能:
無符號 io_uring_peek_batch_cqe(結構 io_uring *ring,結構 io_uring_cqe **cqes,無符號計數)
int io_uring_wait_cqe_nr(結構 io_uring *ring,結構 io_uring_cqe **cqe_ptr,無符號 wait_nr)
我知道第一個函數將填充一個 I/O 完成數組,直到 cqes 計數,並且無論有多少 cqes 完成都會返回
然而,即使我等待 wait_nr 完成,第二個函數也只向 cqes 填充一個 I/O 完成,為什么會這樣,如果它等待特定數量的 cqes 完成,為什么我沒有填寫 I/O 數組像第一個功能一樣嗎?
比如我創建的例子:#define MAX_BATCH 2000
結構 io_uring_cqe **cqes = malloc(sizeof(struct io_uring_cqe *) * MAX_BATCH);
如果我在第一個函數上運行,我可以訪問 cqes[i] i = (0 to completions)
如果我在第二個函數上運行,我只能訪問 cqes[i] i = 0
我需要了解為什么第二個函數永遠不會像第一個函數那樣更新 cqes 數組
我已經解決了,作為第二個功能:
int io_uring_wait_cqe_nr(結構 io_uring *ring,結構 io_uring_cqe **cqe_ptr,無符號 wait_nr)
將等到 wait_nr 完成 cqe 完成后再繼續,它將返回 cqe I/O 完成並僅更新 cqes 的第一個數組,即 cqes[0],
但是對於第一個功能:
無符號 io_uring_peek_batch_cqe(結構 io_uring *ring,結構 io_uring_cqe **cqes,無符號計數)
無論是否有 cqe 都將返回,並將返回 cqes 的數量和 cqes I/O 的數組
在檢查 cqes 的 struct 是否正確完成異步后,用函數標記它:
void io_uring_cq_advance(struct io_uring *ring, struct io_uring_cqe *cqe, unsigned count) 釋放 cqes 條目,以便下一個 cqes 指向 cqes[0]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.