目录
正文快速背景最新进展总结正文
大概半年前,我写过一篇文章《Go 要违背初心吗?新提案:手动管理内存》。有兴趣了深入解的同学,可以再回顾一下。
(资料图)
当时我们还想着 Go 团队应该不会接纳,至少不会那么快:
懒得翻也可以看我再次道来,本文提到的提案《proposal: arena: new package providing memory arenas》,这其中的 Arena 将会是一个突破项。
快速背景
Arena 指的是一种从一个连续的内存区域分配一组内存对象的方式。优点比一般的内存分配更有效率,也可以一次性释放。当然了,它的重点是要手动管理内存。
Go 团队希望加进 Go 特性中,示例代码如下:
import ( “arena” … ) type T struct { val int } func main() { a := arena.New() var ptrT *T a.New(&ptrT) ptrT.val = 1 var sliceT []T a.NewSlice(&sliceT, 100) sliceT[99].val = 4 a.Free() }
手动调用 arena.New
方法分配 arena 内存,再调用 Free
方法进行释放。
简单来讲就是可以手动管理内存,就可以做很多事了,也 “容易” 崩。
最新进展
这个提案一直在 issues 上适度的争议讨论,@Michael Knyszek 大佬代码写的很快,已经直接提交上去了...直到最近被人发现,让他更新进度。
已经明确:Go1.20 将会支持 arena 特性,通过 GOEXPERIMENT=arena
来打开,接受大家的 review 和使用,抗阻很小。
已实现 API 和原提案不同的地方有:
API 使用了泛型,例如:arena.New[int](myArena "int")
。Arena 的 块大小是 8 MiB 而不是 64 MiB,似乎在更多情况下提供了更好的性能。MSAN 和 ASAN 模式可用于识别不会导致崩溃的 use-after-free 错误(内存损坏应该仍然是不可能的)。 需注意,这些模式对非 cgo 的 Go 程序几乎没有作用。Arena 是个例外。
另外根据社区的反馈,可能还会出现配套类型的 Arena。如下函数签名:
// MakeMap creates a new map[K]V with the provided capacity. // The map[K]V must not be used after the arena is freed. // Accessing the underlying storage of the map after free may result in a fault, // but this fault is also not guaranteed. func MakeMap[K comparable, V any](a *Arena, cap int "K comparable, V any") map[K]V { ... }
在 Go1.20 发布该新特性的话,按照发布周期计划,是 2 月份左右发布,相信大家很快就能用上,可以多多关注。
总结
一开始了解这个提案时,还想着 Go 搞了快 10 年才采纳和推进泛型。这 Arena 应该不至于这么快吧?毕竟加进去了,许多程序都可以写的复杂起来。
没想到...现实打脸来的太快,推进的很快。
就像其他小伙伴说的,这可以从代码优化性能,而不需要砍需求。也是一个有意思且不错的源动力!
据小道消息,某些同学表示在框架和其它场景测过,有说变得快了,有说没差多少。比较迷,提案内暂时未提供测试报告,不好定论。
Go 1.20 Beta 将在未来几周内(2022.11 月底前)发布,让我们拭目以待:)
以上就是Go1.20 arena新特性示例详解的详细内容,更多关于Go1.20 arena新特性的资料请关注脚本之家其它相关文章!
X 关闭
X 关闭
- 15G资费不大降!三大运营商谁提供的5G网速最快?中国信通院给出答案
- 2联想拯救者Y70发布最新预告:售价2970元起 迄今最便宜的骁龙8+旗舰
- 3亚马逊开始大规模推广掌纹支付技术 顾客可使用“挥手付”结账
- 4现代和起亚上半年出口20万辆新能源汽车同比增长30.6%
- 5如何让居民5分钟使用到各种设施?沙特“线性城市”来了
- 6AMD实现连续8个季度的增长 季度营收首次突破60亿美元利润更是翻倍
- 7转转集团发布2022年二季度手机行情报告:二手市场“飘香”
- 8充电宝100Wh等于多少毫安?铁路旅客禁止、限制携带和托运物品目录
- 9好消息!京东与腾讯续签三年战略合作协议 加强技术创新与供应链服务
- 10名创优品拟通过香港IPO全球发售4100万股 全球发售所得款项有什么用处?