基于fasthttp
的服务器最多比net/http
快10倍。
哪些实施细节使fasthttp
快得多?此外,它如何比net/http
更好地管理传入请求?
答案 0 :(得分:19)
来自http implementation fasthttp in golang的文章“husobee”提及:
嗯,这是一个更好的实现,有几个原因:
- 工作池模型是零分配模型,因为工作者已经初始化并准备好服务,而在stdlib实现中,
go c.serve()
必须为goroutine分配内存。- 工作池模型更容易调整,因为您可以增加/减少您能够接受的工作单元数量的缓冲区大小,而不是stdlib中的fire and and forget模型
- 工作池模型允许处理程序通过通道通信与服务器建立更多连接,如果服务器需要关闭,例如,它将能够比stdlib实现更容易地与工作人员通信
- 处理程序函数定义签名更好,因为它只接受包含处理程序所需的请求和编写器的上下文。这比标准库更好,因为你从stdlib获得的只是一个请求和响应编写器......在go1.7中包含请求中的上下文的工作几乎是一个黑客,可以给人们他们真正想要的东西(上下文)没有打破任何人。
醇>总的来说,编写一个具有工作池模型的服务器来处理请求更好,而不是仅为每个请求生成一个“线程”,而无法开箱即用。