Go语言中的高效并发技术
在Go语言中,有几种高效的并发技术可以用来编写并发代码,例如:
- Goroutines
- Channels
- Synchronization primitives
- Package
sync
andsync/atomic
下面是一些示例代码:
示例1:使用Goroutines
package main
import (
"fmt"
"time"
)
func hello() {
fmt.Println("Hello world goroutine")
}
func main() {
go hello() // 创建一个goroutine
time.Sleep(1 * time.Second) // 等待goroutine执行
}
示例2:使用Channels
package main
import "fmt"
func sum(a, b int, c chan int) {
c <- a + b // 把和发送到c
}
func main() {
c := make(chan int) // 创建一个新的int类型channel
go sum(3, 4, c) // 在一个goroutine中调用sum
fmt.Println(<-c) // 从c中接收数据并打印
}
示例3:使用Mutex
package main
import (
"fmt"
"sync"
)
var x int
var wg sync.WaitGroup
var mu sync.Mutex
func add() {
defer wg.Done()
for i := 0; i < 1000; i++ {
mu.Lock()
x += 1
mu.Unlock()
}
}
func main() {
wg.Add(2)
go add()
go add()
wg.Wait()
fmt.Println(x)
}
示例4:使用Atomic
package main
import (
"fmt"
"sync/atomic"
)
var x int32
func add() {
for i := int32(0); i < 1000; i++ {
atomic.AddInt32(&x, 1)
}
}
func main() {
go add()
go add()
for {
time.Sleep(time.Millisecond)
v := atomic.LoadInt32(&x)
if v >= 2000 {
fmt.Println(v)
break
}
}
}
以上代码演示了Go语言中并发编程的一些基本概念和技术。这些技术可以帮助开发者编写出高效、可靠的并发程序。
评论已关闭