【SpringBoot3,Golang并发原理解析
由于原代码是针对Spring Boot 3的教育性示例,并且Golang并不是主流编程语言之一,与并发原理相关的具体实现细节可能会有所不同。但是,我们可以提供一个简单的Golang并发示例来解释并发原理。
package main
import (
"fmt"
"sync"
"time"
)
func worker(id int, wg *sync.WaitGroup) {
defer wg.Done() // 在函数退出时通知WaitGroup一个goroutine已经结束
fmt.Printf("Worker %d starting\n", id)
time.Sleep(2 * time.Second) // 模拟工作
fmt.Printf("Worker %d done\n", id)
}
func main() {
var wg sync.WaitGroup
for i := 1; i <= 5; i++ {
wg.Add(1) // 为每个goroutine增加一个计数
go worker(i, &wg) // 创建goroutine执行worker函数
}
wg.Wait() // 等待所有goroutine完成
}
这段代码使用了sync.WaitGroup
来协调主goroutine和工作goroutine之间的同步。主goroutine创建了5个工作goroutine,并通过wg.Add(1)
为每个goroutine在等待组中注册计数。每个工作goroutine完成工作后,通过wg.Done()
通知sync.WaitGroup
其已完成。wg.Wait()
会阻塞直到所有工作goroutine都完成。这就是Golang中并发原理的一个简单示例。
评论已关闭