mirror of
https://github.com/ii64/gouring.git
synced 2024-10-18 15:11:09 +02:00
Go io uring syscall implementation without CGO, rewrite on branch v0.4
assets | ||
bench/perf | ||
examples | ||
.gitignore | ||
go.mod | ||
go.sum | ||
hdr.go | ||
hdr_int_flags.go | ||
hdr_struct.go | ||
inline_cost.py | ||
LICENSE | ||
Makefile | ||
prep.go | ||
queue.go | ||
queue_test.go | ||
README.md | ||
register.go | ||
setup.go | ||
sigset.go | ||
syscall.go | ||
syscall_nr_amd64.go | ||
uring.go | ||
uring_bench_test.go | ||
uring_test.go | ||
util_ptr_arith.go | ||
util_ptr_arith_test.go | ||
util_union.go |
gouring
go get github.com/ii64/gouring
Examples
Write
// setup
h, err := gouring.New(256, 0)
if err != nil {
log.Fatal("Error creating ring: ", err)
}
defer h.Close()
fd, err := unix.Open("/tmp/gouring_test", unix.O_RDWR, 0677)
if err != nil {
log.Fatal("Error opening file: ", err)
}
sqe := h.GetSqe()
b := []byte("io_uring!\n")
gouring.PrepWrite(sqe, fd, &b[0], len(b), 0)
submitted, err := h.SubmitAndWait(1)
if err != nil {
log.Fatal("Error waiting ring: ", err)
}
println(submitted) // 1
var cqe *gouring.IoUringCqe
err = h.WaitCqe(&cqe)
if err != nil {
log.Fatal("Error waiting cqe: ", err)
} // check also EINTR
_ = cqe.UserData
_ = cqe.Res
_ = cqe.Flags
Read
// setup
h, err := gouring.New(256, 0)
if err != nil {
log.Fatal("Error creating ring: ", err)
}
defer h.Close()
fd, err := unix.Open("/tmp/gouring_test", unix.O_RDWR, 0677)
if err != nil {
log.Fatal("Error opening file: ", err)
}
sqe := h.GetSqe()
b := make([]byte, 20)
gouring.PrepRead(sqe, fd, &b[0], len(b), 0)
submitted, err := h.SubmitAndWait(1)
if err != nil {
log.Fatal("Error waiting ring: ", err)
}
println(submitted) // 1
var cqe *gouring.IoUringCqe
err = h.WaitCqe(&cqe)
if err != nil {
log.Fatal("Error waiting cqe: ", err)
} // check also EINTR
_ = cqe.UserData
_ = cqe.Res
_ = cqe.Flags
log.Println("CQE: ", cqe)
log.Println("Buffer: ", b)
log.Println("Buffer: ", string(b))
Graph
SQPOLL | non-SQPOLL |
---|---|