新一代网络框架UringNet,基于最新的异步I O

如何使用这个框架,简单的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

提示:
  1. 在我们使用wrk进行性能测试时,我们观察到UringNet在进行HTTP压力测试时需要一个预热时间。通常情况下,需要约5分钟的预热(用wrk预先压测5分钟),以确保UringNet测试代码达到其性能峰值。目前还不太清楚为什么io_uring需要预热才能够达到压测峰值性,该问题任然在研究中。
  2. UringNet的性能表现和参数设置密切相关,主要影响的参数有,
    1. 线程数num,用于设定启用的io_uring实例数量,一般设置为(CPU总数±1)。
    2. sqpoll这个参数通常设置为true能够达到更好的性能,不过CPU占用会上升。
    3. 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年嵌入式&物联网开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新!!

*](https://bbs.csdn.net/topics/618654289)

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新!!

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值