gnet icon indicating copy to clipboard operation
gnet copied to clipboard

Question about the "read" function of "eventloop"

Open zhu121 opened this issue 2 years ago • 5 comments

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.

zhu121 avatar May 19 '22 08:05 zhu121

不是很明白你的问题。

panjf2000 avatar May 20 '22 11:05 panjf2000

不是很明白你的问题。

想请教下,gnet是否会遇到这样的问题:

  • 连接A的fd是100
  • 调用eventloop的read()处理连接A的读取,但还没真的读走数据
  • 连接A被另一个goroutine关闭了
  • 此时有个连接B建立,且操作系统复用fd,连接B的fd也是100
  • 连接A真正读数据时,读到的是连接B的数据

zhu121 avatar May 23 '22 02:05 zhu121

连接 A 关闭之后 gnet 会清理掉保存的 connection 数据,所以 fd 被复用也不会有问题。

panjf2000 avatar May 24 '22 11:05 panjf2000

框架层也需要考虑一些应用层实际应用的问题:

  1. 通常应用层逻辑会使用额外的逻辑协程池
  2. 除了http类的无状态服务比较容易做到跟框架一块Close & Clear,其他很多业务类型,应用层都会持有Conn并且不太容易保证同步Close & Clear。比如一个队列模块会异步Conn Write,如果此时的Conn即使调用写也不会真正写入原来的fd那没什么问题,如果仍然能够写入原fd,则需要考虑窜号的问题

lesismal avatar May 26 '22 13:05 lesismal

另外,对于ringbuffer之类的使用,我之前给gev提过一个issue,也都是需要考虑应用层在使用poller框架封装实际业务时需要面对的问题也可以讨论下,我就不单独开帖了: https://github.com/Allenxuxu/gev/issues/114

lesismal avatar May 26 '22 13:05 lesismal