我试图在Java中使用GPars来处理几种类型的消息。 每种消息类型都有一个actor。
但是消息处理需要花费很多时间,而消息会不断发生。
,当演员忙时,我需要忽略即将发出的消息(只是扔掉它们)我怎么知道GPars演员是否忙?我知道Actor.isActive()
方法,但我不太确定它是什么(JavaDoc非常含糊不清),我找不到任何有用的信息。
答案 0 :(得分:0)
我担心没有内置的方法来确定这一点。您必须自己实现一个忙碌控制算法,可能基于CountdownLatches。
答案 1 :(得分:0)
一般来说,这可能会有问题,因为演员只能一次处理一条消息,无论你必须做什么解决方案,都会有局限性。例如,你可以在一个演员,一个主管和一个工人中有一个演员。
工人演员是实际完成工作的人。结果是工作被发送给主管。主管有一个布尔变量,如isBusy,最初是假的。收到工作后,主管将变量设置为true,并将工作传递给工作人员。工作完成后,工作人员将结果发送回主管,主管将isBusy设置为false并返回结果。
如果在isBusy为false时收到另一条消息,主管可以发回消息,例如isBusy消息,或者不执行任何您想要的消息。
请注意,如果工作程序崩溃或重新启动,则isBusy仍然为true。如果它能满足您的需求,您将需要考虑这个解决方案。可能有一个邮箱哪个更好,我不知道。
无论你做什么,你应该尽力避免造成你可以让你的演员系统处于糟糕状态的情况,祝你好运。