第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Go(lang) 中的地址空間是什么?

Go(lang) 中的地址空間是什么?

Go
人到中年有點甜 2021-09-10 15:35:58
我試圖了解 Go 中并發(fā)編程的基礎(chǔ)知識。幾乎所有文章都使用術(shù)語“地址空間”,例如:“所有 goroutine 共享相同的地址空間”。這是什么意思?我試圖從 wiki 了解以下主題,但沒有成功:http://en.wikipedia.org/wiki/Virtual_memoryhttp://en.wikipedia.org/wiki/Memory_segmentationhttp://en.wikipedia.org/wiki/Page_(computer_memory)...但是目前對我來說很難理解,因為我在內(nèi)存管理和并發(fā)編程等領(lǐng)域的知識真的很差。有許多未知詞,如段、頁面、相對/絕對地址、VAS 等。有人可以向我解釋問題的基本原理嗎?可能有一些有用的文章,我找不到。
查看完整描述

2 回答

?
呼如林

TA貢獻1798條經(jīng)驗 獲得超3個贊

Golang 規(guī)范

go" 語句開始執(zhí)行作為獨立并發(fā)控制線程的函數(shù)調(diào)用,或者goroutine,在同一地址空間內(nèi)。

有人可以向我解釋問題的基本原理嗎?

“地址空間”是一個通用術(shù)語,可應(yīng)用于多種情況:

地址空間是通過組合足夠多的唯一標識限定符來創(chuàng)建的,以使地址明確(在特定地址空間內(nèi))

Dave Cheney的演講“讓 Go 變得更快的五件事”說明了在同一進程地址空間中使用 goroutine 解決的主要問題:堆棧管理。

Dave's 限定了“地址空間”,首先談到線程:

因為進程切換可以在進程執(zhí)行的任何時候發(fā)生,操作系統(tǒng)需要存儲所有這些寄存器的內(nèi)容,因為它不知道當前正在使用哪些寄存器。

這導(dǎo)致了線程的發(fā)展,線程在概念上與進程相同,但共享相同的內(nèi)存空間

(所以這是關(guān)于內(nèi)存的)

然后 Dave 說明了進程地址空間(由進程管理的地址)內(nèi)的堆棧:

http://img1.sycdn.imooc.com//613b0afd00016e8606100490.jpg

傳統(tǒng)上在進程的地址空間內(nèi),

  • 堆位于內(nèi)存的底部,就在程序(文本)上方并向上增長。

  • 堆棧位于虛擬地址空間的頂部,并向下增長。

另請參閱“堆棧和堆是什么以及在哪里? ”。

問題:

因為堆和棧相互覆蓋將是災(zāi)難性的,操作系統(tǒng)通常會安排在棧和堆之間放置一個不可寫的內(nèi)存區(qū)域,以確保如果它們確實發(fā)生沖突,程序?qū)⒅兄埂?/p>

對于線程,這可能會導(dǎo)致限制進程的堆大小:

http://img1.sycdn.imooc.com//613b0b080001ba6808400491.jpg

隨著程序中線程數(shù)量的增加,可用地址空間的數(shù)量會減少。

goroutine 使用不同的方法,同時仍然共享相同的進程地址空間:

那些 goroutine 的堆棧要求呢?

Go 編譯器不使用保護頁,而是在每個函數(shù)調(diào)用中插入檢查,以檢查是否有足夠的堆棧供函數(shù)運行。如果沒有,運行時可以分配更多的堆??臻g。

由于這種檢查,goroutines 的初始堆棧可以變得更小,這反過來又允許 Go 程序員將 goroutines 視為廉價資源。

Go 1.3 引入了一種管理這些堆棧的新方法:

http://img1.sycdn.imooc.com//613b0b150001db8109580505.jpg

如果 goroutine 的堆棧太小,將分配一個新的、更大的堆棧,而不是添加和刪除額外的堆棧段。

舊堆棧的內(nèi)容被復(fù)制到新堆棧,然后 goroutine 繼續(xù)使用新的更大的堆棧。

在第一次調(diào)用 H 之后,堆棧將足夠大,因此對可用堆棧空間的檢查將始終成功。


查看完整回答
反對 回復(fù) 2021-09-10
?
HUH函數(shù)

TA貢獻1836條經(jīng)驗 獲得超4個贊

當您的應(yīng)用程序在 RAM 上運行時,RAM 中的地址由內(nèi)存管理器分配給您的應(yīng)用程序。這稱為地址空間。

概念:

處理器 (CPU) 在 Fetch-Decode-Execute 循環(huán)中執(zhí)行指令。它通過將指令提取到 RAM(隨機存取存儲器)來執(zhí)行應(yīng)用程序中的指令。這樣做是因為從磁盤一路獲取它的效率非常低。有人需要跟蹤內(nèi)存使用情況,因此操作系統(tǒng)實現(xiàn)了內(nèi)存管理器。您的應(yīng)用程序由一些程序組成,在您的情況下,這是用 Go 編程語言編寫的。當您執(zhí)行腳本時,操作系統(tǒng)以上述方式執(zhí)行指令。

看了你的帖子,感同身受。隨著程序的增多,你提到的術(shù)語會變得越來越熟悉。

我第一次從操作系統(tǒng)書(又名恐龍書)中遇到這些術(shù)語。

希望這對你有幫助。


查看完整回答
反對 回復(fù) 2021-09-10
  • 2 回答
  • 0 關(guān)注
  • 223 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號