gnet
gnet copied to clipboard
Question about the "read" function of "eventloop"
Please fill out the following system information before opening an issue:
- OS : windows 11
- Go version : 1.18.1
- gnet version : v2.0.3
What is your question about gnet? Whether it need to use lock to prevent multiple conn data confusion when fd is reused on unix.
不是很明白你的问题。
不是很明白你的问题。
想请教下,gnet是否会遇到这样的问题:
- 连接A的fd是100
- 调用eventloop的read()处理连接A的读取,但还没真的读走数据
- 连接A被另一个goroutine关闭了
- 此时有个连接B建立,且操作系统复用fd,连接B的fd也是100
- 连接A真正读数据时,读到的是连接B的数据
连接 A 关闭之后 gnet 会清理掉保存的 connection 数据,所以 fd 被复用也不会有问题。
框架层也需要考虑一些应用层实际应用的问题:
- 通常应用层逻辑会使用额外的逻辑协程池
- 除了http类的无状态服务比较容易做到跟框架一块Close & Clear,其他很多业务类型,应用层都会持有Conn并且不太容易保证同步Close & Clear。比如一个队列模块会异步Conn Write,如果此时的Conn即使调用写也不会真正写入原来的fd那没什么问题,如果仍然能够写入原fd,则需要考虑窜号的问题
另外,对于ringbuffer之类的使用,我之前给gev提过一个issue,也都是需要考虑应用层在使用poller框架封装实际业务时需要面对的问题也可以讨论下,我就不单独开帖了: https://github.com/Allenxuxu/gev/issues/114