import "fmt"
var ch = make(chan string)
func message(){
msg := <- ch
fmt.Println(msg)
}
func main(){
go message()
ch <- "Hello,CSP."
}
当然,无论是Clojure还是Go,我都实在算不上熟悉(因为需要了解这些模型,我之前现学的..orz),因此上面的解释也可能有部分地方存在偏颇,还望指点~
Go的CSP并发模型
Go实现了两种并发形式。第一种是大家普遍认知的:多线程共享内存。其实就是Java或者C++等语言中的多线程开发。另外一种是Go语言特有的,也是判岁者Go语言推荐的:CSP(communicating sequential processes)并发模型。
CSP 是 Communicating Sequential Process 的简称,中文可以叫做通信顺序进程,是一掘薯种并发编程模型,由 Tony Hoare 于雀凯 1977 年提出。简单来说,CSP 模型由并发执行的实体(线程或者进程)所组成,实体之间通过发送消息进行通信,这里发送消息时使用的就是通道,或者叫 channel。CSP 模型的关键是关注 channel,而不关注发送消息的实体。 Go 语言实现了 CSP 部分理论 。
“ 不要以共享内存的方式来通信,相反, 要通过通信来共享内存。”
Go的CSP并发模型,是通过 goroutine和channel 来实现的。
goroutine 是Go语言中并发的执行单位。其实就是协程。
channel是Go语言中各个并发结构体(goroutine)之前的通信机制。 通俗的讲,就是各个goroutine之间通信的”管道“,有点类似于Linux中的管道。
Channel
Goroutine
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)