My first question is what are the different possibilities for two applications to share data?
正如S.Lott指出的那样,有很多机制:
My second question is what are the pros and cons of using memory-mapped files?
优点:
>非常快 – 根据您访问数据的方式,可能会使用zero-copy机制直接对数据进行操作而不会受到速度损失.必须小心以一致的方式更新对象.
>应该非常便携 – 可以在Unix系统上使用大约25年(给或拿),and apparently Windows has mechanisms too.
缺点:
>单系统共享.如果要在多台计算机上分发应用程序,共享内存不是一个很好的选择. Distributed shared memory systems are available,但他们觉得我的思维方式非常像错误的界面.
>即使在单个系统上,如果内存位于单个NUMA node上,但需要由来自多个节点的处理器访问,则与给予每个节点自己的内存段相比,节点间请求可能会显着减慢处理速度.
>您不能只存储指针 – 所有内容都必须存储为基址的偏移量,因为内存可能会映射到不同进程中的不同位置.我不知道这对Java对象意味着什么,尽管可能有人聪明地尽力让它对Java程序员透明.如果您没有使用他们提供的机制,那么您可能必须自己完成工作. (如果没有Java中的实际指针,也许这不是很麻烦.)
>事实证明,持续更新对象非常困难.在消息传递系统中传递immutable objects通常会导致程序具有较少的并发错误. (Erlang中的并发编程感觉非常自然而直接.更多imperative languages中的并发编程往往会引入大量新的并发控制:semaphores,mutexes,spinlocks,monitors).