Go 为什么fasthttp比net/http快?

Go 为什么fasthttp比net/http快?,go,fasthttp,Go,Fasthttp,基于Web的服务器的速度是net/http的10倍 哪些实现细节使fasthttp更快?此外,它如何比net/http更好地管理传入请求?来自的文章提到: 好的,这是一个更好的实现,原因如下: 工作池模型是一种零分配模型,因为工作池已经初始化并准备好服务,而在stdlib实现中,go c.service()必须为goroutine分配内存 工作池模型更容易调整,因为您可以增加/减少能够接受的工作单元数量的缓冲区大小,而不是stdlib中的fire-and-forget模型 工作池模型允许处理程序

基于Web的服务器的速度是
net/http
的10倍

哪些实现细节使
fasthttp
更快?此外,它如何比
net/http
更好地管理传入请求?

来自的文章提到:

好的,这是一个更好的实现,原因如下:

  • 工作池模型是一种零分配模型,因为工作池已经初始化并准备好服务,而在stdlib实现中,
    go c.service()
    必须为goroutine分配内存
  • 工作池模型更容易调整,因为您可以增加/减少能够接受的工作单元数量的缓冲区大小,而不是stdlib中的fire-and-forget模型
  • 工作池模型允许处理程序通过通道通信与服务器进行更多的连接,例如,如果服务器需要关闭,它将能够比stdlib实现更容易地与工作程序进行通信
  • 处理程序函数定义签名更好,因为它只在包含处理程序所需的请求和编写器的上下文中使用。这比标准库要好得多,因为你从stdlib得到的只是一个请求和响应编写器……go1.7中在请求中包含上下文的工作几乎是一种黑客行为,可以在不破坏任何人的情况下为人们提供他们真正想要的(上下文)
  • 总的来说,编写一个带有工作池模型的服务器来服务请求要好一些,而不是只为每个请求生成一个“线程”,而没有现成的节流方式


    @amit verma,但是,请考虑到这个软件包更快的原因之一是速度。因此,如果我是你,为了安全起见,我会从
    net/http
    开始:喜欢CS/IT的人自然会过度优化,因为我们都喜欢我们的系统是“最好的”。不幸的是,在现实世界中,大多数情况下可维护性都胜过原始速度。@amit verma,好吧,除非你是Facebook,比如说,你可以提供给自己,让自己在项目中进行疯狂的可维护性工作,比如让PHP真正为他们的工作负载工作;-)我的意思是,
    net/http
    经过了战斗测试,符合标准,有核心围棋团队支持。那么,您现在真的需要
    fasthttp
    的原始速度吗?你有瓶颈吗?您是否分析过它并排除了常见的罪魁祸首(如无效的分配/大量指向指向指针的指针等)?主要原因:fasthttp不是HTTP的完整实现。fasthttp可能对大多数HTTP内容都足够好,但不是对所有内容都足够好。@Volker…你能告诉我fasthttp中遗漏了哪些内容吗对于初学者来说,没有HTTP/2支持我测试了一个基准测试,net/HTTP vs fasthttp,非常有趣