Goroutines – Go語言中的併發


Golang,也稱為Go,是一種旨在高效且可擴充套件以滿足現代計算需求的程式語言。其最強大的功能之一是能夠透過使用 Goroutines 來處理併發。在本文中,我們將討論 Goroutines 是什麼以及如何將其用於 Go 語言中的併發程式設計。

什麼是 Goroutines?

Goroutine 是 Go 語言中一種輕量級的執行執行緒,它允許程式同時執行多個任務。Goroutines 由 Go 執行時管理,該執行時將它們的執行排程到可用的處理器上。與傳統的執行緒不同,Goroutines 建立成本更低,消耗的記憶體更少,這使得它們在併發程式設計中更高效。

使用 Goroutines 進行 Go 語言併發

為了演示 Goroutines 用於併發程式設計的用法,讓我們考慮一個計算一系列數字之和的簡單程式。我們可以使用單個 Goroutine 或多個 Goroutines 來編寫此程式,具體取決於我們想要達到的併發級別。

示例

這是一個使用單個 Goroutine 計算一系列數字之和的程式:

package main

import (
   "fmt"
)

func main() {
   sum := 0
   for i := 1; i <= 100000; i++ {
      sum += i
   }
   fmt.Println("Sum:", sum)
}

輸出

Sum: 5000050000

此程式使用單個 Goroutine 計算從 1 到 100,000 的數字之和。該程式透過迭代遍歷系列中的每個數字並將其新增到執行總和來工作。迭代完成後,程式列印最終總和。

示例

現在讓我們重寫程式以使用多個 Goroutines 進行併發處理:

package main

import (
   "fmt"
)

func sum(start, end int, result chan<- int) {
   sum := 0
   for i := start; i <= end; i++ {
      sum += i
   }
   result <- sum
}

func main() {
   result := make(chan int)
   go sum(1, 50000, result)
   go sum(50001, 100000, result)
   sum1, sum2 := <-result, <-result
   fmt.Println("Sum:", sum1+sum2)
}

輸出

Sum: 5000050000

此程式使用兩個 Goroutines 分別計算從 1 到 50,000 和從 50,001 到 100,000 的數字之和。每個 Goroutine 計算其分配的數字範圍的總和並將結果傳送到共享通道。然後,主 Goroutine 從通道接收兩個結果並將它們加在一起以產生最終總和。

結論

Goroutines 提供了一種強大的方法來實現 Go 語言中的併發。透過允許程式同時執行多個任務,Goroutines 可以極大地提高併發程式設計的效能和效率。在本文中,我們討論了 Goroutines 是什麼以及如何將其用於 Go 語言中的併發程式設計。透過遵循提供的示例,您可以學習如何使用 Goroutines 在 Go 語言中編寫高效且可擴充套件的併發程式。

更新於:2023年4月19日

瀏覽量:309

開啟您的職業生涯

完成課程獲得認證

開始學習
廣告