希望添加调用 conn.AsyncWrite 后提供成功回调功能 #242
Labels
enhancement
New feature or request
proposal
Proposal for this repo
waiting for response
waiting for the response from commenter
我正在尝试使用 gnet 优化我的rpc框架,为了减少操作系统malloc的次数,我对于发送数据的
[]byte
进行了池化,但是我没有一个适合的时间来将从池中取出的[]byte
放回。可以在这个仓库获取该用例:https://github.com/MashiroC/begonia-gnet-example其中
common/conn.go
:函数
BuildMessage
的作用是构建一个数据帧,在240行从池中取出了一个[]byte
,避免了malloc,然后在后续我查看了gnet代码,AsyncWrite
会将数据写进一个队列,由该队列来写数据。然而我找不到任何合适的将[]byte
放回池内的时机。如果提前放回,那么在一定并发的情况下,该函数内会取到一个已经压入队列但是还没有写入到网络的
[]byte
,然后会对将数据写入,覆盖之前的数据,会出现非常严重的bug。如果将240行改为239行,进行一次malloc的话,是完全没有问题的。但是这样会造成极大的性能损耗,是难以接受的。
由此,我希望提供在写成功之后进行回调的功能,这样便可以将数据在该时机放回池内。如果认为提供该功能不合适,我也可以自己fork该仓库进行修改
The text was updated successfully, but these errors were encountered: