Go語言程式,併發列印1到100的數字,每個數字由一個單獨的goroutine列印


在這篇文章中,我們將編寫一個Go語言程式,併發地列印從1到100的數字,每個數字由一個單獨的goroutine列印。併發意味著並行且獨立地執行多個任務,並確保利用系統的所有資源。這可以透過goroutine(輕量級執行緒)和通道來實現。

語法

func make ([] type, size, capacity)

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

演算法

  • 此程式匯入fmt、main和sync作為必要的包。

  • 建立一個名為print_number的函式,該函式有兩個引數:數字n和指向sync.WaitGroup的指標。

  • 在這個函式內部,使用Println函式列印數字,並在列印完成後使用Done方法發出通知。

  • 建立一個main函式。

  • 在main函式中,初始化sync.WaitGroup(wg)。

  • 在此步驟中,使用for迴圈迭代從1到100,並在每次迭代中使用Add方法向sync.WaitGroup新增一個goroutine。

  • 對於每個數字,透過呼叫wg.Add(1)來遞增sync.WaitGroup計數器。

  • 透過呼叫go print_number(i, &wg)啟動goroutine來列印數字。

  • 在此步驟中,使用wg.Wait()方法等待所有goroutine完成。這會阻塞程式的執行,直到sync.WaitGroup計數器達到零。

  • 所有goroutine完成後,程式終止。

示例1

在這篇文章中,我們將編寫一個Go語言程式,使用sync.WaitGroup併發地列印從1到100的數字,以顯示goroutine的完成情況。

package main

import (
	"fmt"
	"sync"
)

func print_number(n int, wg *sync.WaitGroup) {
	defer wg.Done()
	fmt.Println(n)
}

func main() {
	var wg sync.WaitGroup
	fmt.Println("The numbers from 1 to 100 printed concurrently are:")

	for i := 1; i <= 100; i++ {
		wg.Add(1)
		go print_number(i, &wg)
	}

	wg.Wait()
}

輸出

The numbers from 1 to 100 printed concurrently are:
100
51
52
53
76
26
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
64
54
55
56
57
58
59
60
61
62
63
12
1
2
3
4
5
6
7
8
9
10
11
70
65
66
67
68
69
37
77
71
72
73
74
75
31
27
28
29
30
43
38
39
40
41
42
34
32
33
35
18
13
14
15
16
17
36
46
44
45
21
19
20
23
22
24
48
47
49
50
25

示例2

在這篇文章中,我們將編寫一個Go語言程式,使用done併發地列印從1到100的數字,以顯示goroutine的完成情況。

package main

import (
	"fmt"
)

func print_number(n int, done chan bool) {
	fmt.Println(n)
	done <- true
}

func main() {
	done := make(chan bool)
	fmt.Println("The numbers printed concurrently from 1 to 100 are:")

	for i := 1; i <= 100; i++ {
		go print_number(i, done)
	}

	for i := 1; i <= 100; i++ {
		<-done
	}
}

輸出

The numbers printed concurrently from 1 to 100 are:
100
51
77
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
89
78
79
80
81
82
83
84
85
86
87
88
57
52
53
54
55
56
69
64
65
66
67
68
72
70
71
95
90
91
92
93
94
74
73
60
58
59
98
96
97
61
62
50
99
1
75
76
63

結論

我們編譯並執行了使用兩個示例併發列印從1到100的數字的程式。在第一個示例中,我們使用了sync.WaitGroup,在第二個示例中,我們使用了done來表示goroutine的完成。

更新於:2023年8月4日

652 次瀏覽

啟動您的職業生涯

完成課程獲得認證

開始學習
廣告