1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        ?Go 經典入門系列 20:并發(fā)入門

        共 1746字,需瀏覽 4分鐘

         ·

        2020-12-22 13:57

        點擊上方藍色“Go語言中文網”關注,每天一起學 Go

        歡迎來到我們 Golang 系列教程[1]的第 20 篇。

        Go 是并發(fā)式語言,而不是并行式語言。在討論 Go 如何處理并發(fā)之前,我們必須理解何為并發(fā),以及并發(fā)與并行的區(qū)別。

        并發(fā)是什么?

        并發(fā)是指立即處理多個任務的能力。一個例子就能很好地說明這一點。

        我們可以想象一個人正在跑步。假如在他晨跑時,鞋帶突然松了。于是他停下來,系一下鞋帶,接下來繼續(xù)跑。這個例子就是典型的并發(fā)。這個人能夠一下搞定跑步和系鞋帶兩件事,即立即處理多個任務。

        并行是什么?并行和并發(fā)有何區(qū)別?

        并行是指同時處理多個任務。這聽起來和并發(fā)差不多,但其實完全不同。

        我們同樣用這個跑步的例子來幫助理解。假如這個人在慢跑時,還在用他的 iPod 聽著音樂。在這里,他是在跑步的同時聽音樂,也就是同時處理多個任務。這稱之為并行。

        從技術上看并發(fā)和并行

        通過現(xiàn)實中的例子,我們已經明白了什么是并發(fā),以及并發(fā)與并行的區(qū)別。作為一名極客,我們接下來從技術的角度來考察并發(fā)和并行。:)

        假如我們正在編寫一個 web 瀏覽器。這個 web 瀏覽器有各種組件。其中兩個分別是 web 頁面的渲染區(qū)和從網上下載文件的下載器。假設我們已經構建好了瀏覽器代碼,各個組件也都可以相互獨立地運行(通過像 Java 里的線程,或者通過即將介紹的 Go 語言中的 Go 協(xié)程來實現(xiàn))。當瀏覽器在單核處理器中運行時,處理器會在瀏覽器的兩個組件間進行上下文切換。它可能在一段時間內下載文件,轉而又對用戶請求的 web 頁面進行渲染。這就是并發(fā)。并發(fā)的進程從不同的時間點開始,分別交替運行。在這里,就是在不同的時間點開始進行下載和渲染,并相互交替運行的。

        如果該瀏覽器在一個多核處理器上運行,此時下載文件的組件和渲染 HTML 的組件可能會在不同的核上同時運行。這稱之為并行。

        并行不一定會加快運行速度,因為并行運行的組件之間可能需要相互通信。在我們?yōu)g覽器的例子里,當文件下載完成后,應當對用戶進行提醒,比如彈出一個窗口。于是,在負責下載的組件和負責渲染用戶界面的組件之間,就產生了通信。在并發(fā)系統(tǒng)上,這種通信開銷很小。但在多核的并行系統(tǒng)上,組件間的通信開銷就很高了。所以,并行不一定會加快運行速度!

        Go 對并發(fā)的支持

        Go 編程語言原生支持并發(fā)。Go 使用 Go 協(xié)程(Goroutine) 和信道(Channel)來處理并發(fā)。在接下來的教程里,我們還會詳細介紹它們。

        并發(fā)的介紹到此結束。請留下你的反饋和評論。祝你愉快。

        上一教程 - 接口 - II

        下一教程 - Go 協(xié)程[2]


        via: https://golangbot.com/concurrency/

        作者:Nick Coghlan[3]譯者:Noluye[4]校對:polaris1119[5]

        本文由 GCTT[6] 原創(chuàng)編譯,Go 中文網[7] 榮譽推出

        參考資料

        [1]

        Golang 系列教程: https://studygolang.com/subject/2

        [2]

        Go 協(xié)程: https://studygolang.com/articles/12342

        [3]

        Nick Coghlan: https://golangbot.com/about/

        [4]

        Noluye: https://github.com/Noluye

        [5]

        polaris1119: https://github.com/polaris1119

        [6]

        GCTT: https://github.com/studygolang/GCTT

        [7]

        Go 中文網: https://studygolang.com/



        推薦閱讀


        福利

        我為大家整理了一份從入門到進階的Go學習資料禮包,包含學習建議:入門看什么,進階看什么。關注公眾號 「polarisxu」,回復 ebook 獲?。贿€可以回復「進群」,和數(shù)萬 Gopher 交流學習。


        瀏覽 50
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            撸一撸网站 | 青青草在线视频免费视频 | 黄色片A片 | 精品麻豆一区二区国产明星 | 日本色情视频免费 | 久久精国产| 国产97视频在线 | 色屁屁草草影院ccyy.com | 成人无码高清在线观看 | 99re在线视频观看精品观看 |