2016-06-10 4 views
2

Я читаю 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 проводится конечной количества времени.

+0

«Способ блокировки и ожидания», как может быть метод? – Raedwald

+0

Нет такой вещи, как безжизненный _method_. Wait-freedom является свойством _algorithm_. Часто весь алгоритм содержится в одном методе, но не всегда.Если «ожидания свободы» 'isItWaitFree()' зависит от '// Остальное', то это, вероятно, означает, что' // Остальное' является частью одного и того же алгоритма. –

ответ

2

Насколько я понимаю, wait-freedom является свойством не только функции/метода, но и среды, в которой он будет выполнен. Так как голодание может произойти из-за «недобросовестные» алгоритмы планирования, WAIT-свобода может быть достигнута

  1. только для метода неблокирующей
  2. только в случае подхода планирования, где эффективный приоритет в очереди задач постепенно поднятые пропорционально их времени ожидания, пока они не доберутся до вершины очереди и не получат возможность завершить свою работу.

UPDATE:

В качестве альтернативы, поживем свобода собственности/привилегия метода может быть каким-то образом подвергается планировщиком, так что он может планировать такие задачи отдельно.

Смежные вопросы