前言
基础
我们使用Go语言,基本上是因为他原生支持的高并发:Goroutine 和 Channel;
Go 的并发属于 CSP 并发模型的一种实现;
CSP 并发模型的核心概念是:“不要通过共享内存来通信,而应该通过通信来共享内存”。
简单用法
我一开始学习Go语言的时候,遇到大访问量的时候,会先创建一个带缓冲的channel,然后起一个Go协程来逐个读取channel中的数据并处理。
说他是并发是因为他没有占用主线程,而是另起了一个协程独自运行。但是这没有实现请求之间的并发。
特别注意:Go语言中的map不是并发安全的,要想实现并发安全,需要自己实现(如加锁),或者使用sync.Map。
package main
import (
"fmt"
"runtime"
"time"
)
func main(){
//这里我们假设数据是int类型,缓存格式设为100
dataChan:=make(chan int,100)
go func(){
for{
select{
case data:=
fmt.Println("data:",data)
time.Sleep(1 * time.Second)//这里延迟是模拟处理数据的耗时
}
}
}()
//填充数据