Open smallnest opened 5 years ago
evio是tidwall封装epoll实现的事件池,注册方法的逻辑不能有阻塞的,当然这也可以理解,作者已经做了mulit event loop,可以跑多核了。
一般Go语言的TCP(和HTTP)的处理都是每一个连接启动一个goroutine去处理...
大佬,貌似这个说法有待斟酌。 一般咱们常见的golang的服务端, 一个连接通常会有两个协程的 (读写协程), 有些低质量的client lib可能每个连接都会独立一个心跳协程。
看 https://github.com/golang/go/blob/master/src/net/http/server.go#L2884
如果你读写分离,启动两个goroutine per conn也没问题,启动100个goroutine per commands in conn也没问题, 模式都是一样的, mutilple goroutine per connection
@rfyiamcool
一般Go语言的TCP(和HTTP)的处理都是每一个连接启动一个goroutine去处理...
大佬,貌似这个说法有待斟酌。 一般咱们常见的golang的服务端, 一个连接通常会有两个协程的 (读写协程), 有些低质量的client lib可能每个连接都会独立一个心跳协程。
@smallnest 是的 😁
好喜欢博主的博客页面,不知道使用的是hexo 哪个主题呢?可否分享下。
在linux上跑epoll跑错这个
fdVal %+v &{{0 0 0} 7 10 1 true false tcp 0xc4200e0150 0xc4200e0180 <nil> {139624608312816}}
pfdVal %+v <invalid reflect.Value>
panic: reflect: call of reflect.Value.FieldByName on zero Value
不要轻易开启tcp.recycle
如果客户端是nat 会影响tcp握手, 短连接很明显
"50个docker容器做客户端,每个建立2万个连接,总共建立一百万的连接" 我看用docker的bridge模式,而bridge模式的NAT方式IP+端口做转发。IP不变,只用端口,也不可能超过65535连接。也没找到相关文章的实现原理,还是端口复用导致的提升连接数?
应该可以完全使用系统调用,不使用conn之类的封装,来避免每次通过反射来获取conn的fd
为什么例1要起一个http server呀?
@szl-926929 为什么例1要起一个http server呀?
使用了pprof吧
服务端worker poll模式,同一个conn有可能被分配到了不同的gorutine,同一时间可能有多个gorutine对同一个conn进行数据读取,这样是比较危险的,很有可能读到一些数据错乱的数据,需要应用层自己重新拼接数据
@ldeng7 应该可以完全使用系统调用,不使用conn之类的封装,来避免每次通过反射来获取conn的fd
有吗有吗,这个好
@jackru88888 服务端worker poll模式,同一个conn有可能被分配到了不同的gorutine,同一时间可能有多个gorutine对同一个conn进行数据读取,这样是比较危险的,很有可能读到一些数据错乱的数据,需要应用层自己重新拼接数据
不会吧,你再解析http或者tcp的时候肯定是按照协议读取到一个请求后再处理,不会读取出错呀
@szl-926929 为什么例1要起一个http server呀?
为了用pprof做性能分析
easygo 的作者为什么用eventfd实现epoll,有什么好处或者不同吗
大佬 unix包是哪来的?
同问,这个unix包哪儿来的呢?
https://colobu.com/2019/02/23/1m-go-tcp-connection/