Go 的 net/http 另一实现 fasthttp
最近发现一个第三方 Go http 包,据作者的介绍很厉害,它是net/http的另一个实现包,高性能,低内存占用,比 Go net/http 内置包快 10 倍,哇,这也太叼了吧。以下是作者的包介绍,项目开源地址: https://github.com/valyala/fasthttp
Fast HTTP package for Go. Tuned for high performance. Zero memory allocations in hot paths. Up to 10x faster than net/http
作者在乌克兰,离俄罗斯很近。
用了很牛逼的服务器作为测试机器,作者只公布测试结果。看了结果再看基本使用方法,发现一个问题,有不少的方法没有和 net/http 做兼容,这么说,现有的框架要使用 fasthttp 还真需要重新开发(修改),测试;才能让用户用上fasthttp,要推行,估计要些时日了。
我很好奇,为什么性能提升这么大?以 net/http 基准做测试,快出 10 倍,有点不可思议。作者很多极力推崇 sync.Pool ,而且 net/http 原先的设计很保守,对象一旦周期到,就释放掉,完全没有做一些复用重置的考虑,fasthttp 正是抓住了一个点,改进了net/http。
我不知道 Go 1.6 以后,http2 能不能有质的飞跃,也就是就说 会不会和 fasthttp 有些重合,毕竟再过几个月 Go 1.6 就要出来了,而 fasthttp 还处在开发功能性的阶段。这个性能测试 如果是真实可靠也罢,有时候 template 的渲染,数据 db 的读写,会降低整体的表现,所以说 net/http 现今的性能也就不差了,再几倍 十几倍的提升,其他组件上的性能也需要跟上才说得过去。
总之,fasthttp 这总追求极致性能的做法还是值得去做的,有这些人的努力,Go 才会越来越好!
Fast HTTP package for Go. Tuned for high performance. Zero memory allocations in hot paths. Up to 10x faster than net/http
作者在乌克兰,离俄罗斯很近。
用了很牛逼的服务器作为测试机器,作者只公布测试结果。看了结果再看基本使用方法,发现一个问题,有不少的方法没有和 net/http 做兼容,这么说,现有的框架要使用 fasthttp 还真需要重新开发(修改),测试;才能让用户用上fasthttp,要推行,估计要些时日了。
我很好奇,为什么性能提升这么大?以 net/http 基准做测试,快出 10 倍,有点不可思议。作者很多极力推崇 sync.Pool ,而且 net/http 原先的设计很保守,对象一旦周期到,就释放掉,完全没有做一些复用重置的考虑,fasthttp 正是抓住了一个点,改进了net/http。
我不知道 Go 1.6 以后,http2 能不能有质的飞跃,也就是就说 会不会和 fasthttp 有些重合,毕竟再过几个月 Go 1.6 就要出来了,而 fasthttp 还处在开发功能性的阶段。这个性能测试 如果是真实可靠也罢,有时候 template 的渲染,数据 db 的读写,会降低整体的表现,所以说 net/http 现今的性能也就不差了,再几倍 十几倍的提升,其他组件上的性能也需要跟上才说得过去。
总之,fasthttp 这总追求极致性能的做法还是值得去做的,有这些人的努力,Go 才会越来越好!
1 楼: Xia 发表于 2023-10-17 17:02:41 回复 TA