在查看 Go 和 Erlang 的并发方法时,我注意到它们都依赖于消息传递。
这种方法显然减轻了对复杂锁的需求,因为没有共享状态。
但是,考虑许多客户希望并行只读访问内存中单个大型数据结构(如后缀数组)的情况。
我的问题:
使用共享状态是否会比消息传递更快并且使用更少的内存,因为锁大多是不必要的,因为数据是只读的,并且只需要存在于单个位置?
在消息传递上下文中如何解决这个问题?会不会有一个进程可以访问数据结构,而客户端只需要按顺序从它请求数据吗?或者,如果可能的话,是否将数据分块以创建多个保存块的进程?
鉴于现代 CPU 和内存的架构,这两种解决方案之间是否存在很大差异——即,共享内存是否可以由多个内核并行读取——这意味着没有硬件瓶颈会使两种实现大致相同?