为什么fasthttp比net/http更快?

Ami*_*rma 16 go fasthttp

一个fasthttp基于服务器高达10倍的速度比net/http.

哪些实现细节fasthttp变得更快?而且,它如何更好地管理传入请求net/http

Von*_*onC 23

来自husobee的文章" golang fasthttp in golang "中提到:

嗯,这是一个更好的实现,原因有以下几点:

  1. 工作池模型是零分配模型,因为工作者已经初始化并准备服务,而在stdlib实现中,go c.serve()必须为goroutine分配内存.
  2. 工作池模型更容易调整,因为您可以增加/减少您能够接受的工作单元数量的缓冲区大小,而不是stdlib中的fire和forget模型
  3. 工作池模型允许处理程序通过通道通信与服务器更加连接,如果服务器需要关闭,例如,它将能够比stdlib实现更容易地与工作人员通信
  4. 处理程序函数定义签名更好,因为它只接受包含处理程序所需的请求和编写器的上下文.这比标准库更好,因为你从stdlib获得的只是一个请求和响应编写器......在go1.7中包含请求中的上下文的工作几乎是一个黑客,可以给人们他们真正想要的东西(上下文)没有打破任何人.

总的来说,为服务请求编写一个带有工作池模型的服务器更好,而不是仅为每个请求生成一个"线程",而无法开箱即用.

  • @ amit-verma,仍然请考虑到这个方案更快的原因之一是[作为失败者的标准"作者的态度](https://groups.google.com/d/msg/golang -nuts/OaQu4QezAr0/AtrwY00LBgAJ).因此,如果我是你,我会开始使用`net/http`来保证安全:那些进入CS/IT*的人有*过度优化的自然趋势,好吧,我们都喜欢我们的系统"最好的".不幸的是,在现实世界*可维护性*大部分时间都胜过原始速度. (2认同)
  • @ amit-verma,好吧,除非您是Facebook,否则可以提供疯狂地进行可维护性工作的项目,例如使PHP实际用于其工作负载;-)我的意思是,`net / http`是战役经过测试并符合标准,并拥有核心的Go团队。那么,您现在真的需要项目的`fasthttp`原始速度吗?*您是否有瓶颈?您是否分析了它并排除了常见的罪魁祸首(例如无效的分配/大量的指向指针的指针等)? (2认同)