golang笔记18--go并发多线程
package main
import (
"fmt"
"sync"
"time"
)
var wg sync.WaitGroup
func worker(id int, wg *sync.WaitGroup) {
defer wg.Done() // 确保Signal()在此函数结束时被调用
fmt.Printf("Worker %d starting\n", id)
time.Sleep(2 * time.Second)
fmt.Printf("Worker %d done\n", id)
}
func main() {
start := time.Now()
// 假设我们想要创建10个goroutines
for i := 1; i <= 10; i++ {
wg.Add(1) // 为等待组增加一个计数
go worker(i, &wg) // 创建goroutine
}
// 等待所有goroutines完成任务
wg.Wait()
end := time.Since(start)
fmt.Printf("Elapsed time: %s\n", end)
}
这段代码使用了sync.WaitGroup
来同步10个goroutines的执行。每个worker函数都会在开始和结束时打印一条消息。主函数中,我们创建了10个goroutines,每个都关联了一个等待组的计数。当所有goroutines完成后,主函数会继续执行并打印总运行时间。这是一个简单的goroutine管理示例,展示了Go语言中并发编程的基本概念。
评论已关闭