gpt4 book ai didi

memory - 共享内存与消息传递如何处理大型数据结构?

转载 作者:IT老高 更新时间:2023-10-28 12:58:20 26 4
gpt4 key购买 nike

在查看 Go 和 Erlang 的并发方法时,我注意到它们都依赖于消息传递。

这种方法显然减少了对复杂锁的需求,因为没有共享状态。

但是,考虑到许多客户端希望对内存中的单个大型数据结构(例如后缀数组)进行并行只读访问的情况。

我的问题:

  • 与消息传递相比,使用共享状态会更快并使用更少的内存吗?因为数据是只读的,并且只需要存在于单个位置,因此锁大多是不必要的?

  • 如何在消息传递上下文中解决这个问题?会不会有一个进程可以访问数据结构,而客户端只需要按顺序从它请求数据吗?或者,如果可能的话,是否将数据分 block 以创建多个保存 block 的进程?

  • 鉴于现代 CPU 和内存的架构,这两种解决方案之间是否存在很大差异 - 即,共享内存可以由多个内核并行读取 - 这意味着不存在硬件瓶颈,否则会导致两者实现大致相同?

最佳答案

要意识到的一件事是,Erlang 并发模型确实没有真正指定消息中的数据必须在进程之间复制,它指出发送消息是唯一的通信方式,并且存在没有共享状态。由于所有数据都是不可变的,这基本的,因此实现很可能不会复制数据而只是发送对它的引用。或者可以使用两种方法的组合。与往常一样,没有最佳解决方案,在选择如何做时需要权衡取舍。

BEAM 使用复制,但发送引用的大型二进制文件除外。

关于memory - 共享内存与消息传递如何处理大型数据结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1798455/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com