读《go语言并发之道》-2

30 阅读2分钟

什么是csp

Go语言中的并发程序可以用两种手段来实现。

  • 共享内存的方式
  • 共享信号量

共享内存的方式

内存访问同步并不是天生就不好。在Go语言中,甚至有时共享内存在某些情况下是合适的。但是,共享内存模型很难正确地使用,特别是在大型或复杂的程序中。

共享信号量

  • Go语言的优势之一它从一开始就建立在CSP的原则之上,因此很容易阅读、编写和推理。
  • 其支持“顺序通信进程”(communicating sequential processes)或被简称为CSP。
  • CSP是一种现代的并发编程模型,在这种编程模型中值会在不同的运行实例(goroutine)中传递,
  • 在Go语言发布之前,很少有语言能够真正地为这些原语提供支持。大多数流行的语言都支持共享和内存访问同步到 CSP 的消息传递样式。当然也有例外,但不幸的是,这些都 局限于没有广泛采用的语言。Go语言是最早将 CSP 的原则纳入其核心的语言之一,并将这种并发编程风格引入到大众中.它的成功也使得其他语言尝试添加这些原语。

go的并发哲学

为了尊重mutex, sync包实现了mutex,但是我们希望Go语言的编程风格将会激励人们尝试史高等级的技巧 。尤其是考虑构建你的程序,以便一次只有一个goroutine 负责某个特定的数据。不要通过共享内存主行 通信。相反,通过通信未共享内存。有数不清的关于Go语言核心团队的丈章访谈,相对于使用像 sync.Mutex 这样的原话,他们更加拥护CSP。

Go 语言的一个座右铭是, “使用通信来共享内存,而不是通过共享内存来通信 。