gpt4 book ai didi

memory - 分配如何工作以及如何防止分配?

转载 作者:IT王子 更新时间:2023-10-29 00:43:52 26 4
gpt4 key购买 nike

go test 工具有一个分析器,可以告诉您在代码中进行的分配量。但是,看到这样的库: https://github.com/valyala/fasthttp声明“热路径中的零内存分配”......这是什么意思?以及如何在 Go 中实现这一目标?

最佳答案

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

明确地说,它们的意思是“在这个有限范围内不会发生任何分配”。你如何做到这一点?通过在此之前分配足够大的缓冲区,然后在范围内利用它。

包作者的目的是通过预先分配以使用更多内存为代价来加速请求处理(或者至少对内存有更恒定的保留,理论上缓冲区的大小可以与需要分配什么)。

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

关于memory - 分配如何工作以及如何防止分配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36946861/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com