<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Go 面試題 011:goroutine 存在的意義是什么?

          共 894字,需瀏覽 2分鐘

           ·

          2021-10-13 23:21

          大家好,我是明哥。

          歡迎大家再次來(lái)到??Go 語(yǔ)言面試題庫(kù)?這個(gè)專欄

          本專欄內(nèi)容,已經(jīng)上傳 github:https://github.com/iswbm/golang-interview

          這個(gè)號(hào)沒(méi)有留言功能呢?,如果文章有寫(xiě)得不對(duì)的地方,可以去那里提交 issue 幫我指正。順便可以幫我點(diǎn)個(gè)小 ??,在那里我對(duì)題庫(kù)進(jìn)行了分類整理,方便索引查找。

          本篇問(wèn)題:goroutine 存在的意義是什么?

          線程其實(shí)分兩種:

          • 一種是傳統(tǒng)意義的操作系統(tǒng)線程

          • 一種是編程語(yǔ)言實(shí)現(xiàn)的用戶態(tài)線程,也稱為協(xié)程,在 Go 中就是 goroutine

          因此,goroutine 的存在必然是為了換個(gè)方式解決操作系統(tǒng)線程的一些弊端 -- 太重 。

          太重表現(xiàn)在如下幾個(gè)方面:

          第一:創(chuàng)建和切換太重

          操作系統(tǒng)線程的創(chuàng)建和切換都需要進(jìn)入內(nèi)核,而進(jìn)入內(nèi)核所消耗的性能代價(jià)比較高,開(kāi)銷較大;

          第二:內(nèi)存使用太重

          一方面,為了盡量避免極端情況下操作系統(tǒng)線程棧的溢出,內(nèi)核在創(chuàng)建操作系統(tǒng)線程時(shí)默認(rèn)會(huì)為其分配一個(gè)較大的棧內(nèi)存(虛擬地址空間,內(nèi)核并不會(huì)一開(kāi)始就分配這么多的物理內(nèi)存),然而在絕大多數(shù)情況下,系統(tǒng)線程遠(yuǎn)遠(yuǎn)用不了這么多內(nèi)存,這導(dǎo)致了浪費(fèi);

          另一方面,棧內(nèi)存空間一旦創(chuàng)建和初始化完成之后其大小就不能再有變化,這決定了在某些特殊場(chǎng)景下系統(tǒng)線程棧還是有溢出的風(fēng)險(xiǎn)。

          相對(duì)的,用戶態(tài)的goroutine則輕量得多:

          • goroutine是用戶態(tài)線程,其創(chuàng)建和切換都在用戶代碼中完成而無(wú)需進(jìn)入操作系統(tǒng)內(nèi)核,所以其開(kāi)銷要遠(yuǎn)遠(yuǎn)小于系統(tǒng)線程的創(chuàng)建和切換;

          • goroutine啟動(dòng)時(shí)默認(rèn)棧大小只有2k,這在多數(shù)情況下已經(jīng)夠用了,即使不夠用,goroutine的棧也會(huì)自動(dòng)擴(kuò)大,同時(shí),如果棧太大了過(guò)于浪費(fèi)它還能自動(dòng)收縮,這樣既沒(méi)有棧溢出的風(fēng)險(xiǎn),也不會(huì)造成棧內(nèi)存空間的大量浪費(fèi)。


          ? ?


          喜歡明哥文章的同學(xué)
          歡迎長(zhǎng)按下圖訂閱!

          ???

          瀏覽 30
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产乱伦自拍 | 日韩中文字幕第一页 | 五月婷婷久久怎么了呀 | 婷婷丁香五月婷婷 | www.操B在线播放 |