Я читаю akka documentation, и теперь я нахожусь в разделе о неблокирующих гарантиях. Вот что сказано (выделено в шахте):Понимание свободы голодания и методов без ожидания
метод является выжидательную свободным, если каждый вызов гарантированно закончить в конечное число шагов.
[...]
как каждый участник может прогрессировать после конечного числа шагов (когда заканчивается вызова), ожидания свободных метод свободны от голода.
Подчеркнутый не совсем ясен для меня. Голодание определено ранее в документации, поскольку участники не могут добиться прогресса (некоторые из них голодают).
Теперь, если несколько потоков называют один и тот же метод без ожидания, они не могут быть голоденными. Означает ли это, что даже если этот метод блокирует и не требует отсрочки, статива никогда не произойдет? Я просто не могу представить точную информацию о методе без ожидания?
Например, если метод вызывает блокировки ввода/вывода методы, как это ждать свободной? Я бы сказал, нет, это не так. Но что об этом один:
public class MyClass{
private static Object mutex = new Object();
private int sharedInt = 0;
public void isItWaitFree(){
synchronized(mutext){
++sharedInt;
}
}
//The rest
}
Я бы сказал, что это зависит от //The rest
, потому что один может включать в себя mutex
acquision на неопределенно долгий промежуток времени.
Каким будет пример истинного метода без ожидания?
UPD: Я полагаю, что методы WIAT свобод являются те, которые используют не блокирующие методы, как AtomicXxx
классов, или если мы можем гарантировать, что mutex
проводится конечной количества времени.
«Способ блокировки и ожидания», как может быть метод? – Raedwald
Нет такой вещи, как безжизненный _method_. Wait-freedom является свойством _algorithm_. Часто весь алгоритм содержится в одном методе, но не всегда.Если «ожидания свободы» 'isItWaitFree()' зависит от '// Остальное', то это, вероятно, означает, что' // Остальное' является частью одного и того же алгоритма. –