Go 語言入門很簡單 -- 15. Go 并發基礎知識 #私藏項目實操分享#

      網友投稿 755 2022-05-29

      在操作系統中,進程和線程的執行都具有并發性。

      并發是指向一段時間內,多個任務可以共享系統資源,同時執行。

      并行是指從某個時刻開始,多個任務同時執行。

      程序的順序執行

      如果在程序中,語句一條語句一條語句順序排列的,如果系統中只有一個程序,那么程序執行時也是按照程序語句排列先后次序,一條一條地執行下去。這種方式就像工廠生產流水線加工方式那樣,這種程序設計方式就叫做順序程序設計。

      在單任務、單處理機系統環境中,內存中只有一道程序作業在執行,一個程序完成后,下一個程序作業才能進入內存繼續執行。

      這種順序執行的程序有三個特點:

      嚴格順序執行。每條程序語句的執行都以前一條語句的結束為前提條件

      一個程序在計算機中運行時獨占全部系統資源。只有程序本身的動作才能改變程序的運行環境。

      程序的執行結果與程序的運行速度無關。即處理機在執行程序任何兩條語句之間的停頓,對程序的運算結果不發生影響。

      這三個特點概括起來就是程序的封閉性和可再現性。

      封閉性:程序一旦運行起來,其計算結果僅僅取決于程序本身,即運行結果唯一。

      可再現性:指同一程序可反復執行,且每次執行結果相同。

      程序的并發執行

      程序的順序執行限制系統內存中只有一道程序作業,這顯然限制了系統性能的發揮,且資源利用率不高。

      現代操作系統都支持程序的并發執行。

      所謂并發執行是指在同一時間間隔內,多個程序可以“同時”執行。

      在單處理機系統中,進程(或線程)通過時間片或者讓出控制權來實現任務切換,以達到“同時”運行多個程序的目的。

      這種方式叫做程序并發執行,但實際上任何時刻都只有一個任務被執行,其他任務則通過某個算法來排隊準備執行。

      Go 語言入門很簡單 -- 15. Go 并發基礎知識 #私藏項目實操分享#

      即宏觀上多個程序任務是“同時”執行,但微觀上各任務還是一個一個地順序執行。

      程序的并發執行可以使得多個程序可以共享系統資源,提高系統資源利用率,還可以增加系統吞吐量。

      同時,系統的并發執行和資源共享也使得系統環境變得非常復雜,不像順序執行那么簡單。

      程序的并發執行基本是由操作系統提供的,Go 在語言層面就支持并發特性。

      程序的并行執行

      和并發執行不同,程序的并行執行是指同一時刻,多個程序可以同時執行。在多處理機系統中,可以讓多個進程,或同一進程內的多個線程做到真正意義上的同時執行,它們之間不需要排隊(這是在理想情況下,系統中進程(線程)的數量可能超過處理機的數量,這是依然需要排隊)。在這種情況下,多個程序才能達到真正意義上的“同時”執行,即并行執行。

      進程的概念

      進程是在并發環境下,程序的一次動態執行過程。它由進程控制塊(PCB)、程序和數據三部分組成,進程在它的生命周期內可能處于執行、就緒、阻塞三種基本狀態。

      在多任務操作系統中,多個進程可以并發執行,而且進程是系統資源分配的基本單位。系統中每個進程都有自己的內存映像區,且互不影響,所以管理簡單,但缺點是系統開銷大。所以,系統能同時創建的進程數量是有限的,不能太多。

      線程的概念

      由于進程的系統開銷大,操作系統的設計者們又提出來更小的獨立運行的單位——線程。

      通過線程來提高系統內程序并發執行的程度,從而進一步提高系統的吞吐量。

      在操作系統中,線程是由進程創建的,所以它繼承了進程的部分資源,且具有進程的一些基本特征。所以多個線程之間也可以并發執行,且比進程的系統開銷小。

      但是,和進程一樣,線程依然是由系統內核管理的,所以在高并發情況下,系統能創建的線程數量依然有限,效率也不高。

      協程的概念

      協程本質上是一種用戶態線程,不需要操作系統進行搶占式調度,而且在真正的實現中寄存于線程中。因此,協程系統開銷極小,可以有效提高線程任務的并發性,避免高并發模式下線程的缺點。

      協程最大優勢在于其“輕量級”,可以輕松創建上百萬個而不會導致系統資源衰竭,而系統最多能創建的進程、線程的數量卻少得多。

      使用協程的有點是編程簡單,結果清晰。但缺點是需要語言的支持,如果語言不支持,則需要用戶在程序中自行實現調度。

      目前,原生支持協程的語言還很少。

      Goroutine

      Go 語言在語言級別支持輕量級線程,叫做 Goroutine,Go 語言標準庫提供的所有系統調用操作(包括同步I/O操作),都會讓出處理機給其他 Goroutine。這使得輕量級線程的切換管理不依賴于系統的進程和線程,也不依賴于 CPU 的核心數量。

      Go 任務調度

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:從一個簡單的Java單例示例談談并發(上)
      下一篇:【產品】產品平面設計:Photoshop、Illustrator和InDesign工具區別
      相關文章
      亚洲色无码专区在线观看| 亚洲欧美一区二区三区日产| 亚洲AV成人精品日韩一区| 最新国产成人亚洲精品影院| 亚洲精品免费在线| 亚洲黄色免费网址| 91亚洲一区二区在线观看不卡| 亚洲AV人无码综合在线观看| 亚洲AV无码一区东京热久久| 亚洲AV无码国产丝袜在线观看| 亚洲AV无码乱码国产麻豆| 亚洲AV无码久久精品色欲| 久久亚洲成a人片| 亚洲邪恶天堂影院在线观看| 久久亚洲精品成人AV| 18gay台湾男同亚洲男同| 亚洲精品国产情侣av在线| 亚洲成人一级电影| 亚洲丰满熟女一区二区v| 亚洲va在线va天堂成人| 亚洲人成自拍网站在线观看| 亚洲日韩精品无码专区| 久久亚洲精品无码网站| 日韩精品亚洲专区在线观看| 亚洲国产精品国产自在在线 | 亚洲一区在线视频| 亚洲1区1区3区4区产品乱码芒果| 国产精品亚洲精品| 亚洲国产精品自在自线观看| 相泽南亚洲一区二区在线播放| 亚洲中文字幕视频国产| 国产亚洲高清不卡在线观看| 亚洲人成在线观看| 亚洲人成电影在线观看青青| 亚洲日韩中文字幕一区| 亚洲阿v天堂在线2017免费| 亚洲无人区午夜福利码高清完整版 | 亚洲国产一成久久精品国产成人综合| 亚洲精品国产V片在线观看| 亚洲男人的天堂www| 精品亚洲成a人片在线观看|