如何使用这个框架,简单的echo程序:
package main
import (
"github.com/y001j/UringNet"
socket "github.com/y001j/UringNet/sockets"
"os"
"sync"
)
type testServer struct {
UringNet.BuiltinEventEngine
testloop \*UringNet.Ringloop
//ring \*uring\_net.URingNet
addr string
multicore bool
}
// OnTraffic
//
// @Description: OnTraffic is a hook function that runs every read event completed
// @receiver ts
// @param data
// @return uring\_net.Action
func (ts \*testServer) OnTraffic(data \*UringNet.UserData, ringnet UringNet.URingNet) UringNet.Action {
data.WriteBuf = data.Buffer
return UringNet.Echo
}
func (ts \*testServer) OnWritten(data UringNet.UserData) UringNet.Action {
return UringNet.None
}
func (ts \*testServer) OnOpen(data \*UringNet.UserData) ([]byte, UringNet.Action) {
return nil, UringNet.None
}
func main() {
addr := os.Args[1]
options := socket.SocketOptions{TCPNoDelay: socket.TCPNoDelay, ReusePort: true}
ringNets, \_ := UringNet.NewMany(UringNet.NetAddress{socket.Tcp4, addr}, 3200, true, runtime.NumCPU(), options, &testServer{}) //runtime.NumCPU()
loop := UringNet.SetLoops(ringNets, 3000)
var waitgroup sync.WaitGroup
waitgroup.Add(1)
loop.RunMany()
waitgroup.Wait()
}
警告:该项目仍在开发中,可能存在一些bug和性能问题。如果您发现任何错误或有任何建议,请随时提出问题。邮箱rocky@yangjian.co
提示:
- 在我们使用wrk进行性能测试时,我们观察到UringNet在进行HTTP压力测试时需要一个预热时间。通常情况下,需要约5分钟的预热(用wrk预先压测5分钟),以确保UringNet测试代码达到其性能峰值。目前还不太清楚为什么io_uring需要预热才能够达到压测峰值性,该问题任然在研究中。
- UringNet的性能表现和参数设置密切相关,主要影响的参数有,
- 线程数num,用于设定启用的io_uring实例数量,一般设置为(CPU总数±1)。
- sqpoll这个参数通常设置为true能够达到更好的性能,不过CPU占用会上升。
- size指的是SQ的大小,也就是输入队列的大小,如果这个值过小,有可能会报错。
// NewMany Create multiple uring instances
//
// @Description:
// @param addr
// @param size set SQ size
// @param sqpoll if set sqpoll to true, io\_uring submit SQs automatically without enter syscall.
// @param num number of io\_uring instances need to be created
// @return \*[]URingNet
// @return error
UringNet.NewMany(UringNet.NetAddress{socket.Tcp4, addr}, 3200, true, runtime.NumCPU(), options, &testServer{})
最后
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此收集整理了一份《2024年嵌入式&物联网开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新!!
*](https://bbs.csdn.net/topics/618654289)
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新!!