有句格言道:“不要通过共享内存来通信,要通过通信来共享内存。”
16 年前 Erlang 就是这样做的~
貌似楼主说的不是 Erlang 中的消息机制,而是 objects 之间的 message,通过 message 的传递减少对象之间的耦合,个人意见,欢迎指正
OO 可以按消息理解,但消息不是 OO。要按消息的方式用,内部应该解决了同步问题。Erlang 就解决得很好,Scala 也内建了 actor。比较遗憾的是 Ruby 没有内建这样的机制
语言内建的好处是,它确立了一套范式,现成的最佳实践。库可以实现更高级的模型。比如,语言内建 actor,库基于 actor 实现 dataflow 之类。
进程间通信靠信号量和管道通信,但是性能比较低 共享内存区的优点是性能非常高,但是缺点显而易见,某一个使用该内存区的进程出现了错误,很有可能导致其他进程崩溃
取舍的问题了吧
http://golang.org/doc/effective_go.html#concurrency Do not communicate by sharing memory; instead, share memory by communicating. 如果没有 golang/erlang 这样低廉的通讯成本,这话也很难成立吧
所有有 memory 且能 communicate 的生物都是 share memory by communicating 而不是 communicate by sharing memory 的,这何止是设计思路,简直就是自然法则,出现了至少几亿年了吧
这个话在应用在操作系统进程内才有指导意义。一个操作系统进程共享地址空间,才会说共享内存。通信是在线程 (系统级线程用户级线程) 之间,轻量级进程之间,或纤程之间