后续tell调用发送的消息是否保证由参与者按照发送的顺序进行处理?示例:
tell
actor ! message1 actor ! message2
参与者是否总是按照发送message1和message2的顺序看到它们?
message1
message2
ygya80vv1#
如果message1和message2按该顺序从同一线程发送,或者从同一参与者发送到同一参与者(并且该参与者使用的邮箱不会对消息重新排序:默认邮箱不这样做,但是可以实现对消息重新排序的邮箱,例如为了实现优先化),目标演员将不会在message1之前接收到message2。因此,这四个中的任何一个都是可能的:
请注意,无法保证发送到不同参与者的两条消息会以任何特定顺序被接收。也无法保证从两个不同参与者发送的消息的顺序(或者,如果在任何参与者之外(例如,在Future回调或main方法中),则为不同的线程)。
Future
1条答案
按热度按时间ygya80vv1#
如果
message1
和message2
按该顺序从同一线程发送,或者从同一参与者发送到同一参与者(并且该参与者使用的邮箱不会对消息重新排序:默认邮箱不这样做,但是可以实现对消息重新排序的邮箱,例如为了实现优先化),目标演员将不会在message1
之前接收到message2
。因此,这四个中的任何一个都是可能的:
message1
,然后接收到message2
message1
,但从未收到message2
message1
,但收到message2
message1
和message2
均未收到请注意,无法保证发送到不同参与者的两条消息会以任何特定顺序被接收。也无法保证从两个不同参与者发送的消息的顺序(或者,如果在任何参与者之外(例如,在
Future
回调或main方法中),则为不同的线程)。