Golang并发模型中的同步与性能优化
引言:随着计算机技术的不断发展,多核处理器的普及,如何有效利用多核资源并提高程序的性能成为了软件开发中的一个重要课题。Golang作为一种并发编程语言,提供了丰富的并发原语和库,使程序员能够充分利用多核处理器的优势,并降低并发编程的复杂性。本文将介绍Golang并发模型中的同步机制和性能优化的方法,并提供具体的代码示例。
一、同步机制
import "sync"
var mu sync.Mutex
var balance int
func Deposit(amount int) {
mu.Lock()
defer mu.Unlock()
balance += amount
}
func main() {
wg := sync.WaitGroup{}
for i := 0; i < 1000; i++ {
wg.Add(1)
go func() {
Deposit(100)
wg.Done()
}()
}
wg.Wait()
fmt.Println(balance)
}
登录后复制
import "sync"
var (
mu sync.Mutex
deposit = 0
cond = sync.NewCond(&mu)
)
func Deposit(amount int) {
mu.Lock()
defer mu.Unlock()
deposit += amount
cond.Signal() // 通知等待的线程
}
func Withdraw(amount int) {
mu.Lock()
defer mu.Unlock()
for deposit < amount { // 判断条件是否满足
cond.Wait() // 等待条件变量的信号
}
deposit -= amount
}
func main() {
go Deposit(100)
go Withdraw(100)
}
登录后复制
import "sync"
var (
sem = make(chan struct{}, 10) // 限制同时访问资源的线程数量为10
balance int
)
func Deposit(amount int) {
sem