用go实现了一个数据库访问的代理,即客户端发数据到proxy proxy转发至后端数据库并将数据返回给客户端,项目使用的go net包;
pprof分析cpu耗时,发现syscall (28%)和epollwait(50%)占比相当高,syscall主要是net的read和write耗时,已经优化合并了部分读写操作,epollwait高的吓人,请大神帮助分析下,感激不尽
![4069.png](https://static.golangjob.cn/221118/1856f1ef5ac4a76cff83e64d99e67269.png)
//for循环监听数据库端返回消息
for {
header := make([]byte, 5)
data, err = io.ReadFull(cc.backendConn.Conn.pkg.Rb, header )
// 处理消息
.....
//写消息到客户端
c.pkg.Wb.Write(data)
}
// 回收数据库连接到资源池
c.closeConn(c.backendConn, false)
}
这个代码需要起一个协程。。。
#8
更多评论
![image.png](https://static.golangjob.cn/221121/a2d9dc67c22104138ef82a2a681acbe6.png)
#1