使用併發計算整數切片之和的Go語言程式


在這篇 Go 語言文章中,我們將編寫程式來接收整數切片並使用併發計算它們的和。併發有助於同時執行多個任務或操作。它有助於有效利用系統資源。它是使用 Go 協程(輕量級執行緒)和通道(有助於 Go 協程之間通訊)實現的。

語法

func make ([] type, size, capacity)

Go 語言中的 make 函式用於建立陣列/對映,它接受要建立的變數型別、大小和容量作為引數。

func range(variable)

range 函式用於迭代任何資料型別。要使用它,我們首先必須編寫 range 關鍵字,然後是我們要迭代到的資料型別,結果迴圈將迭代到變數的最後一個元素。

func len(v Type) int

len() 函式用於獲取任何引數的長度。它將一個引數作為要查詢其長度的資料型別變數,並返回一個整數,即變數的長度。

演算法

  • 此程式匯入 fmt、main 和 sync 作為必要的包,其中 fmt 用於輸入/輸出操作,main 用於生成可執行程式碼,sync 用於實現併發任務。

  • 建立一個名為 sum 的函式,它接收一個整數切片,需要計算其和。

  • 建立一個 total 變數並將其初始化為 0。

  • 然後,使用 range 函式迭代整數切片,並在每次迭代中將輸入元素新增到 total 變數。

  • 迭代所有元素後,返回 total 作為計算出的和。

  • 在此步驟中,建立一個併發 Sum 函式,它接收一個整數切片並使用併發計算它們的和。

  • 然後,根據切片的長度確定將輸入切片劃分的塊數,並將其儲存在 num-chunks 變數中。

  • 然後,使用 make 函式建立一個 sums 切片來儲存每個 goroutine 計算的部分和。

  • 在此步驟中,初始化一個 sync.WaitGroup 並使用 Add 方法向其中新增一個等於塊數的計數。

  • 在這裡,計算塊大小以均勻劃分輸入切片。

  • 然後,使用 for 迴圈為每個塊啟動一個 go 協程。

  • 在每個 go 協程中,使用 sum 函式計算其對應塊的和,並將結果儲存在 sums 切片中。

  • 在此步驟中,使用 wg.Wait() 函式等待所有 go 協程完成。

  • 最後,將計算出的和作為結果返回給函式。

  • 建立一個 main 函式。

  • 在 main 中,建立一個名為 slice 的整數切片。

  • 然後,呼叫 slice 上的 concurrent_sum 函式以使用併發計算和。

  • 然後,使用 fmt 包中的 Println 函式(ln 表示換行)將計算出的和列印到控制檯。

示例

在此示例中,我們將編寫一個 Go 語言程式,藉助 go 協程和通道併發執行程式來計算切片中整數的和。

package main

import (
	"fmt"
	"sync"
)

func sum(nums []int) int {
	total := 0

	for _, num := range nums {
		total += num
	}

	return total
}

func concurrent_sum(nums []int) int {
	num_chunks := len(nums)
	sums := make([]int, num_chunks)
	var wg sync.WaitGroup
	wg.Add(num_chunks)

	chunkSize := (len(nums) + num_chunks - 1) / num_chunks

	for i := 0; i < num_chunks; i++ {
		go func(i int) {
			defer wg.Done()
			start := i * chunkSize
			end := (i + 1) * chunkSize

			if end > len(nums) {
				end = len(nums)
			}

			sums[i] = sum(nums[start:end])
		}(i)
	}

	wg.Wait()

	return sum(sums)
}

func main() {
	slice := []int{10, 20, 30, 40, 50, 60, 70, 80, 90, 100}
	fmt.Println("Numbers:", slice)

	total := concurrent_sum(slice)
	fmt.Println("The Sum of the elements of slice is:", total)
}

輸出

Numbers: [10 20 30 40 50 60 70 80 90 100]
The Sum of the elements of slice is: 550

結論

我們編譯並執行了使用示例程式計算整數切片之和的程式,該示例程式使用 go 協程和通道來執行併發程序。因此,獲得了併發性。

更新於:2023年8月4日

920 次檢視

啟動您的職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.