理论教育 Scala语言基础:Actor消息发送实战

Scala语言基础:Actor消息发送实战

时间:2023-11-24 理论教育 版权反馈
【摘要】:“hello”,将向helloActor的信箱中发送“hello”消息,helloActor的receive方法通过PartialFunction偏函数来匹配收到的消息类型。方法来发送消息,其立即返回一个Future实例。msg语句发送消息,允许发送方等待Future的结果。Send-With-Future的消息并不是获得Future的唯一方法。如下所示,future计算体会被并行地启动运行,并返回一个Future实例作为其结果:还有一种发送消息的方式是!?

Scala语言基础:Actor消息发送实战

到目前为止所创建的Actor都是独立运行的,但是它们该如何协作工作呢?它们是如何在不使用共享内存和锁的前提下通信呢?其实,Actor之间是通过相互发送消息的方式来通信的。可以使用!方法来发送消息,例如:helloActor!“hello”,将向helloActor的信箱中发送“hello”消息,helloActor的receive方法通过PartialFunction偏函数来匹配收到的消息类型。对于邮箱中的每一个消息,receive方法都会先调用传入的偏函数的isDefinedAt方法,来决定它是否与某个样本匹配,然后处理该消息。也可以使用!!方法来发送消息,其立即返回一个Future实例。Future是Future Trait的一个实例,即获取到一个Send-With-Future消息的响应的句柄。

该Send-With-Future消息的发送方可以通过使用Future来等待返回的结果。例如,使用val fut=a!!msg语句发送消息,允许发送方等待Future的结果。可以将前面的fut赋值给一个常量:val res=fut(),这里的res是一个Future的实例,代表将来某个时刻可能返回的值。另外,一个Future可以在不阻塞的情况下,通过isSet方法来查询并获知其结果是否可用。Send-With-Future的消息并不是获得Future的唯一方法。Future也可以通过future方法计算获得。如下所示,future计算体会被并行地启动运行,并返回一个Future实例作为其结果:(www.daowen.com)

还有一种发送消息的方式是!?,使用这种方式,线程将阻塞直到结果返回。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈