2016-06-10 5 views
2

Ich lese akka documentation und jetzt bin ich im Abschnitt über nicht-blockierende Garantien. Hier ist, was gesagt wird (hervorgehoben von mir):Understanding Hunger Freiheit und wartefreie Methoden

Verfahren ist warten frei, wenn jeder Anruf garantiert in einer endlichen Anzahl von Schritten zu beenden.

[...]

wie jeder Teilnehmer nach einer endlichen Anzahl von Schritten fortschreiten kann (wenn der Anruf beendet ), wait freien Verfahren sind frei von Verhungern.

Die Betonung ist mir nicht ganz klar. Hunger ist früher in der Dokumentation definiert, da es für die Teilnehmer unmöglich ist, Fortschritte zu machen (einige sind verhungert).

Nun, wenn mehrere Threads die gleiche wartefreie Methode aufrufen, können sie nicht ausgehungert werden. Bedeutet dies, dass selbst wenn die Methode blockiert und ohne Wartezeit ist, Stavation niemals stattfindet? Ich kann mir keine genauen Details über die Wartemethode vorstellen.

Zum Beispiel, wenn ein Verfahren nennt I/O Methoden blockiert, wird es warten frei? Ich würde nein sagen, ist es nicht. Aber was ist dieses:

public class MyClass{ 

    private static Object mutex = new Object(); 
    private int sharedInt = 0; 

    public void isItWaitFree(){ 
     synchronized(mutext){ 
      ++sharedInt; 
     } 
    } 

    //The rest 
} 

würde ich sagen, es hängt von der //The rest, weil die eine mutex ende Aufnahme für unbegrenzt lange Zeit, beinhalten könnte.

Was wäre das Beispiel für eine echte wartefreie Methode?

UPD: Ich nehme an, dass wiat-Freiheit Methoden diejenigen sind, die wie AtomicXxx Klassen nicht blockierende Techniken verwenden oder wenn wir garantieren können, dass die mutex für endliche Höhe der Zeit gehalten.

+0

"Die Methode blockiert und wartefrei" Wie kann eine Methode beides sein? – Raedwald

+0

Es gibt keine Wartezeiten _method_. Wait-Freedom ist eine Eigenschaft eines _algorithm_. Oft ist der gesamte Algorithmus in einer einzigen Methode enthalten, aber nicht immer.Wenn die "Warte-Freiheit" von "isItWaitFree()" von "// Rest" abhängt, dann bedeutet das wahrscheinlich, dass "// Der Rest" Teil desselben Algorithmus ist. –

Antwort

2

Nach meinem Verständnis ist Wait-Freedom eine Eigenschaft nicht nur der Funktion/Methode, sondern auch der Umgebung, in der sie ausgeführt wird. Da Hunger kann wegen „unfair“ Scheduling-Algorithmen passiert, wartet Freiheits

erreicht werden kann
  1. nur für eine nicht-blockierende Methode
  2. nur im Fall eines Scheduling-Ansatzes, bei dem die effektive Priorität der Warteschlange Aufgaben nach und nach ist proportional zu ihrer Wartezeit erhöht, bis sie an die Spitze der Warteschlange kommen und die Chance bekommen, ihren Job zu erledigen.

UPDATE:

Alternativ kann die Warte Freiheit Eigenschaft/Privileg des Verfahrens kann irgendwie an den Scheduler ausgesetzt werden, so dass sie separat solche Aufgaben planen können.