1. 首页
  2. 主题
  3. Go语言

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

BROVO · · 1922 次点击
:coffee: :smiley: :coffee: :smiley: :coffee: :smiley: :coffee: :smiley: :coffee: :smiley: :coffee: :smiley: :coffee: :smiley: :coffee: :smiley: :coffee: :smiley: :coffee: :smiley: :coffee: :smiley: :coffee: :smiley: :coffee: :smiley: :coffee: :smiley: :coffee: :smiley: ### 大家来聊聊GO语言的并发模型! ### 不要通过共享内存来通信,而应该通过通信来共享内存! ##### 大家如何看待这个观点,可以联系GO与其他语言,比如Java, C, Python等。 > Go实现了两种并发形式。第一种是大家普遍认知的:多线程共享内存。其实就是Java或者C++等语言中的多线程开发。另外一种是 > > Go语言特有的,也是Go语言推荐的:CSP(communicating sequential processes)并发模型。 > > CSP并发模型是在1970年左右提出的概念,属于比较新的概念,不同于传统的多线程通过共享内存来通信,CSP讲究的是"以通信的方式来共享内存"。 > > 请记住下面这句话: > Do not communicate by sharing memory; instead, share memory by communicating. > > "不要以共享内存的方式来通信,相反,要通过通信来共享内存。" > > https://www.cnblogs.com/sunsky303/p/9115530.html
这句话对初学者的理解其实不简单,通过共享内存通信长这样 ```go var number = 0 go func(){ number ++ } go func(){ number ++ } ``` 通过通信共享内存长这样 ```go var number = 0 go func(n *int){ number++ }(&number) go func(n *int){ number++ }(&number) ```
#1

用户登录

没有账号?注册

今日阅读排行

    加载中

一周阅读排行

    加载中