尽量用标准库来实现并发,这样可以避免管理上开销,下面是一个示例
1
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
package main
import (
"fmt"
"sync"
"time"
)
type someDataStruct struct {
Val int
}
var wg sync.WaitGroup
func main() {
t1 := time.Now()
tasks := make(chan someDataStruct, 40)
for i := 0; i < 40; i++ {
wg.Add(1)
go func() {
for data := range tasks {
// do some work on data
fmt.Println(data.Val + 1)
}
wg.Done()
}()
someData := someDataStruct{i}
// Push to it like this:
tasks <- someData
}
// Finish like this
close(tasks)
wg.Wait()
t2 := time.Now()
fmt.Println("消耗时间:", t2.Sub(t1), "秒")
}
运行输出:
1
2
3
4
5
6
7
8
1
2
3
...
38
39
40
消耗时间: 3.848086ms 秒
本文网址: https://golangnote.com/topic/73.html 转摘请注明来源