我在阅读akka documentation,现在我在关于非阻塞保证的部分。以下是我所说的(强调我的):了解饥饿自由和无等待方法
如果每个呼叫都保证以有限数量的步骤完成,那么方法是等待免费的。
[...]
为每个参与者可以在有限数量的步骤(当 呼叫结束)后进步,无等待方法不含饥饿的。
我强调的不是很清楚。在文档中早些时候定义了饥饿,因为参与者不可能取得进展(有些饥饿)。
现在,如果多个线程调用相同的无等待方法,它们不能被饿死。这是否意味着即使方法阻塞并等待免费,stavation也不会发生?我无法描绘关于无等待方法的确切细节?
例如,如果方法调用阻塞I/O方法,它是否等待?我会说不,事实并非如此。但对于这一个:
public class MyClass{
private static Object mutex = new Object();
private int sharedInt = 0;
public void isItWaitFree(){
synchronized(mutext){
++sharedInt;
}
}
//The rest
}
我会说这取决于//The rest
,因为一个可能涉及mutex
习得的时间无限长的量。
什么是真正的等待免费方法的例子?
UPD:我想这WIAT自由度方法是那些使用不进行阻断技术,如AtomicXxx
类或如果我们可以保证持有有限量的时间mutex
。
“该方法是阻塞和等待免费”一个方法如何既是? – Raedwald
有没有这样的事情等待_method_。等待自由是_algorithm_的一个属性。整个算法通常包含在单一方法中,但并非总是如此。如果'isItWaitFree()'的“等待自由”取决于'//其余',那么这可能意味着''剩下的''是同一个算法的一部分。 –