天天看点

Go语言之并发编程

并发概念

在学校,老师课件上是这样定义:

并发是指两个或两个以上的事件或活动在同一时间间隔内(时间段)发生,在多道程序处理时,宏观上并发,微观上交替执行(单处理器)

书本上是这样定义:(大概意思,记不太清楚了)

处理器在一道程序执行并完成之前,可以执行另一道程序,也就实现了多道程序宏观的执行

传统并发—共享内存系统

传统的并发模型是基于内存共享的,各线程通信,需要共享变量,也需要锁的同步机制。共享变量不但要保证原子性,还要保证其他线程能看到修改后的值。(日后补充)

Go语言之并发编程

Go并发—消息传递系统

与传统的并发思维不同,Go语言是提倡基于消息传递的并发模型,并不共享变量,也没有锁的问题。其中就有并发模型,CSP(通信顺序进程)

go语言中特有的数据结构也形成了go语言的特点之一,chan通道,通过的此消息通道的传递从而使得go的并发获得了很好的体现。当然go也有传统并发的机制sync。但是go语言我们是要将其中的特色并发放大。

Message:=make(chan string)
Msg := <- Messages      

通过通过进行数据的传递,从而控制多线程之间的运行过程。

在Go语言社区有一句很有名的语句:

不要通过共享内存来通信,而应该通过通信来共享内存。

并发的内容远不止这些,再往后的学习中,我也会继续探索。