go語言學習之并發并行

      網友投稿 854 2025-04-03

      一,并發編程


      1.1,并發和并行的區別

      并發:

      并發,就是通過一種算法將 CPU 資源合理地分配給多個任務,當一個任務執行 I/O 操作時,CPU 可以轉而執行其它的任務,等到 I/O 操作完成以后,或者新的任務遇到 I/O 操作時,CPU 再回到原來的任務繼續執行。

      通過將 CPU 的使用權在恰當的時機分配給不同的任務,使得多個任務在視覺上看起來是一起執行的。CPU 的執行速度極快,多任務切換的時間也極短,用戶根本感受不到,所以并發執行看起來才跟真的一樣。

      總結:

      其實并發就是單核cpu不斷的切換任務,給我們的感覺像是多個任務同時進行的。

      并行:

      多核 CPU 的每個核心都可以獨立地執行一個任務,而且多個核心之間不會相互干擾。在不同核心上執行的多個任務,是真正地同時運行,這種狀態就叫做并行。

      一圖來區別它們。

      1.2,Goroutine

      go語言學習之并發并行

      go中使用Goroutine來實現并發concurrently。Go應用程序可以并發運行數千個Goroutines。

      func hello(i int) { println("hello world : " + fmt.Sprint(i)) } func main() { for i := 0; i < 5; i++ { go func(j int) { hello(j) }(i) } time.Sleep(time.Second) }

      如上代碼開了五個任務并發執行,輸出來看一下。

      1.3,channel

      Go 語言中的通道(channel)是一種特殊的類型。通道像一個傳送帶或者隊列,總是遵循先入先出(First In First Out)的規則,保證收發數據的順序。每一個通道都是一個具體類型的導管,也就是聲明channel的時候需要為其指定元素類型。

      例子:

      package main func main() { src := make(chan int) dest := make(chan int, 3) go func() { defer close(src) for i := 0; i < 10; i++ { src <- i } }() go func() { defer close(dest) for i := range src { dest <- i * i } }() for i := range dest { println(i) } }

      上述代碼解釋:

      A子協程發生0~9數字到無緩沖通道。

      B子協程將傳入的數字計算為平方到有緩沖通道。

      主協程輸出結果如下:

      1.4,并發安全Lock

      線程安全是指,函數或者某個函數庫在多線程的模式被調用時,能夠正確處理多個線程之間共享變量,使得程序可以正常運行。

      線程調用時線程之間會隨時發生切換會發生不可預料的結果,出現線程不安全。

      Lock可以在“關鍵的位置”提供串行特性,保證數據安全與獨立

      1.5,WaitGroup

      Go語言中除了可以使用通道(channel)和互斥鎖進行兩個并發程序間的同步外,還可以使用等待組進行多個任務的同步,等待組可以保證在并發環境中完成指定數量的任務

      WaitGroup 值在內部維護著一個計數,此計數的初始默認值為零。

      func hello(i int) { println("hello world : " + fmt.Sprint(i)) } func main() { var wg sync.WaitGroup for i := 0; i < 5; i++ { wg.Add(1) go func(j int) { defer wg.Done() hello(j) }(i) } wg.Wait() }

      輸出來看一下。

      Go

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

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

      上一篇:您應該為企業嘗試CRM的5個關鍵原因
      下一篇:excel向上下填充公式的方法
      相關文章
      国产亚洲人成网站观看| 亚洲人成国产精品无码| 亚洲国产精品无码久久一区二区| 老汉色老汉首页a亚洲| 亚洲精品乱码久久久久久按摩| 亚洲AV无码一区二区三区电影| 国产99在线|亚洲| 亚洲午夜在线播放| 在线综合亚洲欧洲综合网站| 亚洲精品第一综合99久久| 亚洲中文字幕一区精品自拍| 国产 亚洲 中文在线 字幕 | 亚洲欧洲无码AV不卡在线| 亚洲精品国产国语| 亚洲日韩一中文字暮| 亚洲av中文无码字幕色不卡| 亚洲妇女无套内射精| 国产成人高清亚洲一区久久| 午夜亚洲av永久无码精品| 亚洲av中文无码| 国产亚洲精久久久久久无码77777| 国产亚洲美女精品久久久2020| 亚洲小说区图片区另类春色| 亚洲国产精品无码久久一线| 亚洲视频在线视频| 亚洲国产夜色在线观看| 亚洲精品第一国产综合野| 亚洲中字慕日产2020| 亚洲人成欧美中文字幕| 亚洲AV无码XXX麻豆艾秋| 亚洲成年看片在线观看| 亚洲情综合五月天| 亚洲国产成人久久精品影视| 亚洲综合激情六月婷婷在线观看| 亚洲啪啪免费视频| 亚洲欧美第一成人网站7777 | 亚洲AV噜噜一区二区三区| 亚洲AV无码乱码在线观看牲色| 久久久久亚洲精品无码网址| 精品久久久久久亚洲| 亚洲精品日韩中文字幕久久久|