关于内存和通信的问题

关于内存和通信的问题

老师,您好。

​课上讲过:不要通过共享内存来通讯,通过通讯来共享内存。有几个问题:

1、通过共享内存来通讯的,比如mysql的主从通讯,这个应该算是吧,老师你能详细讲讲吗?或者有其他的吗?

2、channel作为能改变这样的方式,用的时候,只是使用channel,它的本质是什么呢?为何如此厉害

3、两种方式,为什么共享内存来通讯的方式相对来说,比较不好呢?

正在回答

登陆购买课程后可参与讨论,去登陆

1回答

抱歉回复晚了。


这三个问题都问的非常好。我发现这句话我讲的不严谨:不要通过共享存储来通讯,通过通讯来共享存储

  1. mysql那个不是,那个是网络通讯,属于典型的“通过通讯来共享存储“。通过共享内存来通讯,典型的是传统的生产者消费者问题的解法:https://www.jianshu.com/p/4263b3ddda93 。

  2. go语言中,一个channel就很自然的解决了生产者消费者这个普遍但是困难的问题。本质的话,从概念上讲,就是一个channel,通过它可以让发送方和接收方在发送/接收两句语句处同步。从实现上来讲,它其实必定封装了许多传统的同步原语,比如上述的生产者与消费者问题的解法。

  3. 这里的好不好是相对的。但通常,存储,我们希望它具有确定性。比如一个变量,我写进去1,那读出来也是1。但一旦把存储共享了,就打破了这个确定性。

    通过通讯来共享存储,我们其实并没有真正共享存储,只是互相通讯,告知对方各自的存储的值,我告诉你我这个值是1,告诉完了我可以修改我的值,你收到了你也可以修改你收到的值,仍然互不影响。如果需要同步,我再发一个新的值给你就行。这样的前提下,双方的存储都具有确定性。


  • qq_森_12 提问者 #1

    没事哈,我的问题不着急。

    2021-11-29 10:25:11
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师