Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在JVM上传递零拷贝消息_Java_Jvm_Actor_Message Passing_Actor Model - Fatal编程技术网

Java 在JVM上传递零拷贝消息

Java 在JVM上传递零拷贝消息,java,jvm,actor,message-passing,actor-model,Java,Jvm,Actor,Message Passing,Actor Model,actor消息传递语义的忠实实现意味着从逻辑角度对消息内容进行深度复制,即使对于不可变类型也是如此。消息内容的深度复制仍然是原始实现actor模型的最大瓶颈之一,因此一些实现(即Kilim)支持零拷贝消息传递 我的问题是,在像JVM这样的共享内存平台中,零拷贝消息传递(作为一个应用程序的一部分)是如何实现的?我假设它只适用于具有不可变内容的消息,并且必须以某种方式限制消息引用的可见性。然而,我很难找到Actor模型实现背后的“理论”。我不知道任何实际实现是如何完成的,但当编译时确保了不可变性时,

actor消息传递语义的忠实实现意味着从逻辑角度对消息内容进行深度复制,即使对于不可变类型也是如此。消息内容的深度复制仍然是原始实现actor模型的最大瓶颈之一,因此一些实现(即Kilim)支持零拷贝消息传递


我的问题是,在像JVM这样的共享内存平台中,零拷贝消息传递(作为一个应用程序的一部分)是如何实现的?我假设它只适用于具有不可变内容的消息,并且必须以某种方式限制消息引用的可见性。然而,我很难找到Actor模型实现背后的“理论”。

我不知道任何实际实现是如何完成的,但当编译时确保了不可变性时,如下图所示:

 class Immutable {
     private final String str = "A";
     public String getString(){
         return str;
     }
 }

你可以简单地传递一封推荐信,对吗?它不是一个Actor库,但是Google Guava给了你一个习惯用法
returnImmutableList.copyOf(someList)someList
是不可变的(即,如果它是不可变列表的一个实例),那么它将是零拷贝。猜测可以使用类似的方法,例如,通过实现标记接口
Immutable
,并进行检查,从而决定是否复制。

Kilim通过强制消息对象的单个所有者并在消息传递过程中实现消息引用的参与者到参与者的切换来实现零复制消息传递。在程序员级别,引用实际上从一个堆中消失,出现在另一个堆上,但在进程中没有分配或解除分配消息。Erjang是使用Java+Kilim实现的

不安全的零拷贝消息传递是Scala参与者和Akka参与者在同一进程中的标准做法。我说这是不安全的,因为它们不能保护您在参与者之间共享对可变对象的引用。坚持发送不变的消息是程序员的责任。实际上,这是一个完全合理的权衡。您只需要在编写代码或审阅其他人的代码时意识到这一点