select多路复用
select 多路复用 " 在某些场景下我们可能需要同时从多个通道接收数据,通道在解说数据时,如果没有数据可以被接收那么当前的 goroutine 将会发生阻塞" 你可能会这么写: 虽然可以实现需求,但是程序的运行性能会非常差。Go 语言内置了select关键字,使用它可以同时响应多个通道操作。 特点: 可处理一个或多个channel的发送/接收操作; 如果

wxvirus2022年6月25日
大约 3 分钟
channel
channel goroutine和goroutine之间的通道就是channel。 定义一个channel 所以还是推荐使用make来进行创建channel 记住第一句话,channel是用于goroutine和goroutine之间的通信的,如果用在和别的地方进行发送数据,就会产生panic。 发送数据使用<-符号来进行发送。 没有->这个符号! 接收数

wxvirus2022年3月27日
大约 10 分钟
并发安全与锁

并发安全和锁

案例

package main

import (
	"fmt"
	"sync"
)

// 多个goroutine并发操作全局变量x

var (
	x  int64
	wg sync.WaitGroup
)

func add() {
	for i := 0; i < 5000; i++ {
		// 1. 拿到全局变量x
		// 2. 给这个值+1
		// 3. 加1后在赋值给全局变量x
		x++ // 对全局变量进行每次+1
	}
	wg.Done()
}

func main() {
	wg.Add(2)
	go add()
	go add()
	wg.Wait()
	fmt.Println(x) // 7180 5285 各种值
}


wxvirus2021年9月27日
大约 6 分钟