Я новичок в Akka и не смог найти ответ в справочном руководстве.
Предположим, у нас есть удаленные акторы, распределенные в кластере из 3-х машин (A, B, C), где на каждой машине живет один актор, а у других есть ActorRef на 2 других, т.е.:
Machine A:
A (real actor)
-> B (ref)
-> C (ref)
Machine B:
-> A (ref)
B (real actor)
-> C (ref)
Machine C:
-> A (ref)
-> B (ref)
C (real actor)
Актер A выполняет следующий код:
bRef ! msg1
bRef ! msg2
Актер B выполняет следующий код в обработчике сообщений:
case msg1 =>
cRef ! msg3
aRef ! msg4
Актер C выполняет следующий код в обработчике сообщений:
case msg3 =>
aRef ! msg5
Могу ли я сделать следующие предположения (если есть):
актор B получает msg1 до того, как он получит msg2
актор А получает msg5 до того, как он получит msg4
И дополнительный вопрос, который, вероятно, приводит к пониманию вышеизложенного: отправлено ли сообщение ! оператора через сеть действительно асинхронно или он ждет, пока его получит принимающий почтовый ящик? т.е. делает линию
bRef ! msg1
блокировать до тех пор, пока актор B не получит сообщение в свой почтовый ящик или не создаст поток, который обрабатывает доставку и продолжит выполнение
bRef ! msg2
еще до того, как он узнает, что актер B получил msg1?