亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Go1.20最新資訊go?arena手動管理內(nèi)存鴿了

 更新時間:2023年11月16日 12:07:01   作者:煎魚  
由于過于繁雜,Go?核心團隊成員@Ian?Lance?Taylor,也表態(tài):目前尚未做出任何決定,也不可能在短期內(nèi)做出任何決定,可以認為這個提案基本鴿了,今天這篇文章就是給大家同步目前的情況

導讀

年初有給大家分享 Go1.20 arena 能手動管理內(nèi)存的事情,當時不論是我們讀者,還是社區(qū)上的小伙伴們,都是比較激動的。畢竟這是一個有意思的特性。

這不,今年都快過去了。2024 年要來了。有小伙伴問這個最新的進展:

今天這篇文章就是給大家同步目前的情況。第一節(jié)是前置知識,如果不太記得背景的同學可以快速看一下。

前置知識

Arena 指的是一種從一個連續(xù)的內(nèi)存區(qū)域分配一組內(nèi)存對象的方式。優(yōu)點比一般的內(nèi)存分配更有效率,也可以一次性釋放。當然了,它的重點是要手動管理內(nèi)存。

Go 團隊,基于 Google 自身的需求,快速通過了實踐。在 Go1.20 支持使用環(huán)境變量啟用:

GOEXPERIMENT=arenas go run main.go

預計至少會提供以下 API:

  • NewArena:創(chuàng)建一個新的 arena 內(nèi)存空間。
  • Free:釋放 arena 及其關聯(lián)對象。
  • New:基于 arena,創(chuàng)建新對象。NewSlice 等屬于其派生方法,結果是一樣的。
  • MakeSlice:基于 arena,創(chuàng)建新切片。
  • Clone:克隆一個 arena 的對象,并移動到內(nèi)存堆上。

對應的示例代碼如下:

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()
}

手動調(diào)用 arena.New 方法分配 arena 內(nèi)存,再調(diào)用 Free 方法進行釋放。

簡單來講就是可以手動管理內(nèi)存,就可以做很多事了,當然,也 “容易” 崩。

最新進展

其實這個 arena 提案當時已經(jīng)快速的進入了實驗階段,大家以為能很快就能正式發(fā)布了。(畢竟來自 Google 內(nèi)部的需求)

但這個特性引發(fā)了非常多的討論,應該有超過 1k+ 條評論。

當前 arena 提案的狀態(tài)為:自 2023 年 1 月 17 日起,由于嚴重的 API 問題,該提案被無限期擱置,GOEXPERIMENT=arena 代碼可能會隨時發(fā)生不兼容的更改或刪除,我們不建議在生產(chǎn)中使用它。

由于過于繁雜,Go 核心團隊成員@Ian Lance Taylor,也表態(tài):目前尚未做出任何決定,也不可能在短期內(nèi)做出任何決定。

可以認為這個提案基本鴿了,因為已經(jīng)快一年了,也沒有新的破局思路。

爭議點

原本如此高歌猛進的 arena 提案,是在哪卡殼阻塞了?從我猛翻 1k 樓層來看,以及官方給出的原因來看。

主要還是有一位同學提出:擔心重走上下文(context)的老路!

目前 context 大量的滲透了 Go 所有庫的 API,雖然很難評定好與不好。但是純粹從語言設計的角度來看,上下文并不漂亮。

甚至我經(jīng)常遇到同學來吐槽,咱們這個 ctx 放在函數(shù)第一個參數(shù),或是放結構體里。到底是誰的設計。能不能像 Java 語言一樣來個注解。

但 arena 不一樣,一旦和 context 一樣泛濫,將會帶來更大的影響。你永遠不知道你正在使用的第三方庫,是否使用了手動管理內(nèi)存 arena,是否會導致各種奇怪的問題。(除非你去翻代碼和依賴)

因此 arena 庫的出現(xiàn),將會導致在創(chuàng)建對象時進行的一系列分配行為,將沒有明確的界限,完全取決于應用他的庫如何使用。同時在內(nèi)部處理 arena 和非 arena 情況的實現(xiàn)代碼,將使得 API 將變得更加污染。

最終大家還是希望 arena 能夠在一定的界限范圍內(nèi)明確使用。但這一切均懸而未決。以上是我個人結合討論所理解的提案阻塞緣由。

總結

Arena,這是一個非常受大家關注的特性,因為他可以在 Go 語言中做到手動管理內(nèi)存,做更多的一些騷操作。以后就不用另辟蹊徑走 CGO 了。

但潘多拉魔盒一旦打開,還是有潛在風險的。因此 arena 庫很大概率會在找到更安全的 API 設計后,才會正式轉(zhuǎn)為正式庫對外公開。

當然,如果你想自己內(nèi)部使用,且已經(jīng)知悉風險。也可以直接在 Go1.20 使用 GOEXPERIMENT=arenas 也能夠使用該實驗特性。

以上就是Go1.20最新資訊go arena手動管理內(nèi)存鴿了的詳細內(nèi)容,更多關于Go arena內(nèi)存管理的資料請關注腳本之家其它相關文章!

相關文章

  • golang開發(fā)中channel使用

    golang開發(fā)中channel使用

    channel[通道]是golang的一種重要特性,正是因為channel的存在才使得golang不同于其它語言。這篇文章主要介紹了golang開發(fā)中channel使用,需要的朋友可以參考下
    2020-09-09
  • Go語言原子操作atomic的使用

    Go語言原子操作atomic的使用

    本文介紹了Go語言原子操作的使用方法,原子操作是一種無鎖的技術,可通過CPU指令實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-10-10
  • 如何使用?Go?獲取你的?IP?地址(推薦)

    如何使用?Go?獲取你的?IP?地址(推薦)

    在Go語言中,獲取IP地址分為公共IP和私有IP兩種方式,公共IP地址通過外部API獲取,本文給大家介紹如何使用?Go?獲取你的?IP?地址,感興趣的朋友跟隨小編一起看看吧
    2024-09-09
  • golang文件讀取-按指定BUFF大小讀取方式

    golang文件讀取-按指定BUFF大小讀取方式

    這篇文章主要介紹了golang文件讀取-按指定BUFF大小讀取方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • Golang Recover處理錯誤原理解析

    Golang Recover處理錯誤原理解析

    Golang 中的?recover?是一個鮮為人知但非常有趣和強大的功能,讓我們看看它是如何工作的,以及在 Outreach.io 中如何利用它來處理 Kubernetes 中的錯誤
    2023-12-12
  • Go語言實現(xiàn)控制臺輸入&生成隨機數(shù)詳解

    Go語言實現(xiàn)控制臺輸入&生成隨機數(shù)詳解

    這篇文章主要介紹了Go語言如何實現(xiàn)控制臺輸入&生成隨機數(shù),文中通過示例代碼介紹的非常詳細,對大家的學習有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-05-05
  • go?goth封裝第三方認證庫示例詳解

    go?goth封裝第三方認證庫示例詳解

    這篇文章主要為大家介紹了go?goth封裝第三方認證庫示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • Go中Goroutines輕量級并發(fā)的特性及效率探究

    Go中Goroutines輕量級并發(fā)的特性及效率探究

    這篇文章主要為大家介紹了Go中Goroutines輕量級并發(fā)的特性及效率探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-12-12
  • 手把手帶你走進Go語言之運算符解析

    手把手帶你走進Go語言之運算符解析

    這篇文章主要介紹了手Go語言之運算符解析,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • 一文帶你熟悉Go語言中的分支結構

    一文帶你熟悉Go語言中的分支結構

    這篇文章主要和大家分享一下Go語言中的分支結構(if?-?else-if?-?else、switch),文中的示例代碼講解詳細,對我們學習Go語言有一定的幫助,需要的可以參考一下
    2022-11-11

最新評論