go测试工具具有一个分析器,它可以告诉您在代码中执行的分配量。 然而,看到如下这样的库: https://github.com/valyala/fasthttp 陈述“在热路径中的零内存分配”......这是什么意思?你如何在Go中实现这一目标?分配如何工作以及如何防止分配?
4
A
回答
3
我个人不喜欢他们使用的语言,因为它听起来像一个营销人员会说...他们的意思是说,没有分配将发生在该代码中,因为缓冲区已提前分配使用那里。
所以要清楚,他们的意思是'在这个有限的范围内不会发生分配'。你如何做到这一点?通过在此之前分配足够大的缓冲区,然后在范围内利用它。
包作者的目的是通过以更多的内存为代价(或者至少在内存上保持更多的持久性)来提前分配请求处理,理论上缓冲区可以是相同的大小因为需要分配)。
如果您对实现细节感兴趣,请查看像byte_buffer.go和args.go这样的文件,您会发现事先分配了一个缓冲区对象池,以便您的处理程序代码不会必须为响应主体等进行分配。相反,您从池中获取缓冲区(已分配)并将响应数据写入该缓冲区,然后在完成后将其释放回池中以供重用。在标准场景中,您应该为响应主体分配空间,并且在响应返回后,该对象将离开作用域,并释放内存。正如我在上面的段落中提到的,移动所有这些前沿意味着当您的服务启动时,它将获得并保存比使用net/http的类似服务更大的内存量,因为它会根据需要获取和释放内存基础。
相关问题
- 1. 对象分配操作如何工作
- 2. 如何将工作项目分配给“未分配”?
- 3. 从头开始项目:如何以及何时分配工作量?
- 4. 防止分配给右值
- 5. 以下工会分配的值如何?
- 6. 方法操作以及如何分配它们
- 7. 此值分配如何工作?
- 8. 此列表分配如何工作?
- 9. javascript逻辑分配如何工作?
- 10. 如何分配工作日到按钮?
- 11. C++:成员分配如何工作?
- 12. 左侧分配功能如何工作?
- 13. 数组类型分配如何工作?
- 14. 如何分配内存以及如何释放内存?
- 15. Twig是否允许在条件中分配以及如何进行分配?
- 16. 何时以及如何将火花分配给执行者
- 17. 如何分配使用内嵌分配
- 18. 如何在使用LRUCache时防止内存分配?
- 19. unpickling HasTraits对象:如何防止某些特质的分配
- 20. C++ - 如何防止对象在堆栈上分配?
- 21. 如何防止在子项目上分配点击事件?
- 22. 如何写一个正则表达式,防止部分匹配
- 23. 攻击MySQL - 以及如何防止它?
- 24. 如何重新分配不工作,但malloc可以吗?
- 25. 如何分配SP_DEVICE_INTERFACE_DETAIL_DATA?
- 26. 如何分配css?
- 27. 如何分配IIS_IUSRS
- 28. 分配工作量
- 29. ZeroMQ工作分配
- 30. 逗号分隔符在分配过程中如何工作?