mirror of
https://github.com/ii64/gouring.git
synced 2025-04-01 03:41:44 +02:00
Merge b6cd047a28
into 4937c09d11
This commit is contained in:
commit
e31f6b6e30
6 changed files with 148 additions and 10 deletions
4
.gitignore
vendored
4
.gitignore
vendored
|
@ -1,4 +1,6 @@
|
|||
.vscode/
|
||||
*.cpu
|
||||
*.mem
|
||||
*.test
|
||||
*.test
|
||||
|
||||
.idea
|
65
README.md
65
README.md
|
@ -7,31 +7,82 @@
|
|||
```bash
|
||||
go get github.com/ii64/gouring
|
||||
```
|
||||
## Example
|
||||
# Examples
|
||||
|
||||
## Write
|
||||
```go
|
||||
// setup
|
||||
h, err := gouring.New(256, 0)
|
||||
if err != nil { /*...*/ }
|
||||
defer h.Close()
|
||||
if err != nil {
|
||||
log.Fatal("Error creating ring: ", err)
|
||||
}
|
||||
defer h.Close()
|
||||
|
||||
sqe := h.GetSQE()
|
||||
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")
|
||||
PrepWrite(sqe, 1, &b[0], len(b), 0)
|
||||
gouring.PrepWrite(sqe, fd, &b[0], len(b), 0)
|
||||
|
||||
submitted, err := h.SubmitAndWait(1)
|
||||
if err != nil { /*...*/ }
|
||||
if err != nil {
|
||||
log.Fatal("Error waiting ring: ", err)
|
||||
}
|
||||
println(submitted) // 1
|
||||
|
||||
var cqe *gouring.IoUringCqe
|
||||
err = h.WaitCqe(&cqe)
|
||||
if err != nil { /*...*/ } // check also EINTR
|
||||
if err != nil {
|
||||
log.Fatal("Error waiting cqe: ", err)
|
||||
} // check also EINTR
|
||||
|
||||
_ = cqe.UserData
|
||||
_ = cqe.Res
|
||||
_ = cqe.Flags
|
||||
```
|
||||
|
||||
## Read
|
||||
```go
|
||||
// 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 |
|
||||
|
|
43
examples/read.go
Normal file
43
examples/read.go
Normal file
|
@ -0,0 +1,43 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"github.com/ii64/gouring"
|
||||
"golang.org/x/sys/unix"
|
||||
"log"
|
||||
)
|
||||
|
||||
func main() {
|
||||
|
||||
h, err := gouring.New(256, 0)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
defer h.Close()
|
||||
|
||||
fd, err := unix.Open("/tmp/test", unix.O_RDWR, 0677)
|
||||
|
||||
sqe := h.GetSqe()
|
||||
b := make([]byte, 20)
|
||||
gouring.PrepRead(sqe, fd, &b[0], len(b), 0)
|
||||
log.Println("Buffer: ", b)
|
||||
|
||||
submitted, err := h.SubmitAndWait(1)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
println(submitted) // 1
|
||||
|
||||
var cqe *gouring.IoUringCqe
|
||||
err = h.WaitCqe(&cqe)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
} // check also EINTR
|
||||
|
||||
log.Println("CQE: ", cqe)
|
||||
log.Println("Buffer: ", b)
|
||||
log.Println("Buffer: ", string(b))
|
||||
|
||||
_ = cqe.UserData
|
||||
_ = cqe.Res
|
||||
_ = cqe.Flags
|
||||
}
|
37
examples/write.go
Normal file
37
examples/write.go
Normal file
|
@ -0,0 +1,37 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"github.com/ii64/gouring"
|
||||
"golang.org/x/sys/unix"
|
||||
"log"
|
||||
)
|
||||
|
||||
func main() {
|
||||
|
||||
h, err := gouring.New(256, 0)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
defer h.Close()
|
||||
|
||||
fd, err := unix.Open("/tmp/test", unix.O_RDWR, 0677)
|
||||
|
||||
sqe := h.GetSqe()
|
||||
b := []byte("hello from io_uring!\n")
|
||||
gouring.PrepWrite(sqe, fd, &b[0], len(b), 0)
|
||||
|
||||
submitted, err := h.SubmitAndWait(1)
|
||||
if err != nil { /*...*/
|
||||
}
|
||||
println(submitted) // 1
|
||||
|
||||
var cqe *gouring.IoUringCqe
|
||||
err = h.WaitCqe(&cqe)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
} // check also EINTR
|
||||
|
||||
_ = cqe.UserData
|
||||
_ = cqe.Res
|
||||
_ = cqe.Flags
|
||||
}
|
7
go.mod
7
go.mod
|
@ -2,10 +2,13 @@ module github.com/ii64/gouring
|
|||
|
||||
go 1.18
|
||||
|
||||
require github.com/stretchr/testify v1.7.0
|
||||
require (
|
||||
github.com/davecgh/go-spew v1.1.0
|
||||
github.com/stretchr/testify v1.7.0
|
||||
golang.org/x/sys v0.0.0-20221010170243-090e33056c14
|
||||
)
|
||||
|
||||
require (
|
||||
github.com/davecgh/go-spew v1.1.0 // indirect
|
||||
github.com/pmezard/go-difflib v1.0.0 // indirect
|
||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c // indirect
|
||||
)
|
||||
|
|
2
go.sum
2
go.sum
|
@ -5,6 +5,8 @@ github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZN
|
|||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||
github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
|
||||
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||
golang.org/x/sys v0.0.0-20221010170243-090e33056c14 h1:k5II8e6QD8mITdi+okbbmR/cIyEbeXLBhy5Ha4nevyc=
|
||||
golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
|
||||
|
|
Loading…
Add table
Reference in a new issue