34

基于服务器的fasthttp速度比net/http.

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

4

1 回答 1

37

来自husobee的文章“ http implementation fasthttp in golang ”提到:

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

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

总体而言,最好编写一个具有工作池模型的服务器来处理请求,而不是仅仅为每个请求生成一个“线程”,而没有开箱即用的限制。

于 2017-01-13T05:41:36.520 回答