关于内存和通信的问题
老师,您好。
课上讲过:不要通过共享内存来通讯,通过通讯来共享内存。有几个问题:
1、通过共享内存来通讯的,比如mysql的主从通讯,这个应该算是吧,老师你能详细讲讲吗?或者有其他的吗?
2、channel作为能改变这样的方式,用的时候,只是使用channel,它的本质是什么呢?为何如此厉害
3、两种方式,为什么共享内存来通讯的方式相对来说,比较不好呢?
正在回答
抱歉回复晚了。
这三个问题都问的非常好。我发现这句话我讲的不严谨:不要通过共享存储来通讯,通过通讯来共享存储
mysql那个不是,那个是网络通讯,属于典型的“通过通讯来共享存储“。通过共享内存来通讯,典型的是传统的生产者消费者问题的解法:https://www.jianshu.com/p/4263b3ddda93 。
go语言中,一个channel就很自然的解决了生产者消费者这个普遍但是困难的问题。本质的话,从概念上讲,就是一个channel,通过它可以让发送方和接收方在发送/接收两句语句处同步。从实现上来讲,它其实必定封装了许多传统的同步原语,比如上述的生产者与消费者问题的解法。
这里的好不好是相对的。但通常,存储,我们希望它具有确定性。比如一个变量,我写进去1,那读出来也是1。但一旦把存储共享了,就打破了这个确定性。
通过通讯来共享存储,我们其实并没有真正共享存储,只是互相通讯,告知对方各自的存储的值,我告诉你我这个值是1,告诉完了我可以修改我的值,你收到了你也可以修改你收到的值,仍然互不影响。如果需要同步,我再发一个新的值给你就行。这样的前提下,双方的存储都具有确定性。
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星