GoLang专题

浅谈Go语言并发编程

2018-08-17  本文已影响0人  一根很帅的藤藤菜

一、并发和并行

二、为什么Go是并发编程呢,与其他编程语言相比的不同在哪呢

三、Go并发编程模型

Goroutine - 并发执行

func StartRoutine() {
do something
}

go StartRoutine()

Channel - Goroutine间的通信通道

基本操作

//创建channel
ch := make(chan int, 10)

//发送数据到channel
ch <- x

//从channel接收数据
x <- ch
//另一种方式接收数据
x = <- ch

//关闭chennel
close(configChan)

Range遍历

//创建channel
ch := make(chan int, 10)

//发送数据到channel
ch <- 1
ch <- 2
ch <- 3


//通过range遍历接收通道数据
for x := range ch {
   fmt.Println(x)
}

Select监听

//创建channel
ch1 := make(chan int, 10)
ch2 := make(chan int, 10)
ch3 := make(chan int, 10)
//一些场景中,一些 worker goroutine 需要一直循环处理信息,直到收到 quit 信号
quit:= make(chan struct{})
//定义超时

timeout := time.After(5 * time.Second)

//通过select监听通道状态变化
select {
  case <- ch1:
    ...
  case <- ch2:
    ...
  case ch3 <- 10:
    ...
  case <- timeout:
    ...
  case <- quit:
    return
  default:
    ...
}

单向通道

//只能用于发送的通道
sendCh := make(chan<- int, 10) 

//只能用于接收的通道
receiveCh := make(<-chan int, 10)
上一篇下一篇

猜你喜欢

热点阅读