2016-04-29 30 views

回答

3

我个人不喜欢他们使用的语言,因为它听起来像一个营销人员会说...他们的意思是说,没有分配将发生在该代码中,因为缓冲区已提前分配使用那里。

所以要清楚,他们的意思是'在这个有限的范围内不会发生分配'。你如何做到这一点?通过在此之前分配足够大的缓冲区,然后在范围内利用它。

包作者的目的是通过以更多的内存为代价(或者至少在内存上保持更多的持久性)来提前分配请求处理,理论上缓冲区可以是相同的大小因为需要分配)。

如果您对实现细节感兴趣,请查看像byte_buffer.go和args.go这样的文件,您会发现事先分配了一个缓冲区对象池,以便您的处理程序代码不会必须为响应主体等进行分配。相反,您从池中获取缓冲区(已分配)并将响应数据写入该缓冲区,然后在完成后将其释放回池中以供重用。在标准场景中,您应该为响应主体分配空间,并且在响应返回后,该对象将离开作用域,并释放内存。正如我在上面的段落中提到的,移动所有这些前沿意味着当您的服务启动时,它将获得并保存比使用net/http的类似服务更大的内存量,因为它会根据需要获取和释放内存基础。