что происходит в памяти при передаче сообщений между двумя участниками в scala / akka?

что происходит в памяти при передаче сообщений между двумя участниками в scala / akka? скажем, у меня есть два актера: Actor1 и Actor2, и Actor1 отправляет массив размером 10000 в Actor2, который может содержать целые числа, строки или объекты.

Что будет в памяти? до сих пор я слышал, что «актеры не разделяют память, но разделяют состояние». Значит ли это, что Arraylist из актера1 будет скопирован в актер2? но это звучит так неэффективно, и я не мог найти информацию, чтобы прочитать об этом. какие-нибудь документы? Есть так много примеров того, как участники могут обмениваться сообщениями о пинг-понге, и эти примеры излишни.


person user1870400    schedule 10.08.2015    source источник


Ответы (1)


Для актеров на одной JVM

Одно из ограничений сообщений akka - неизменяемость. Таким образом, вы можете использовать ссылки на один и тот же объект сообщения в разных почтовых ящиках. У каждого актера есть почтовый ящик - обычно очередь, содержащая конверты с сообщениями. Каждое сообщение - это ссылка на объект. Поэтому, когда вы отправляете массив, в почтовый ящик актера добавляется только ссылка, и если это неизменяемый объект, проблем с общими данными возникнуть не может.

person ka4eli    schedule 10.08.2015