Zeit des Ausführungsfensters

8

Ich habe einen Artikel im Buch Elixier in Aktion über Prozesse und Scheduler gelesen und habe einige Fragen:

  • Jeder Prozess bekommt ein kleines Ausführungsfenster, was heißt das?
  • Ausführungsfenster sind etwa 2000 Funktionsaufrufe?
  • Was bewirkt ein Prozess implizit zur Ausführung?
zero_coding 11.03.2016, 21:14
quelle

1 Antwort

16

Angenommen, Sie haben 10.000 Erlang / Elixir-Prozesse ausgeführt. Der Einfachheit halber wollen wir auch sagen, dass Ihr Computer nur einen einzigen Prozess mit einem einzigen Kern hat. Der Prozessor ist nur in der Lage, immer nur eine Sache zu machen, so dass zu jedem Zeitpunkt nur ein einziger Prozess ausgeführt werden kann.

Nehmen wir an, einer dieser Prozesse hat eine lange laufende Aufgabe. Wenn die Erlang-VM den Prozess nicht unterbrechen konnte, musste jeder andere Prozess warten, bis dieser Prozess mit seiner Aufgabe fertig war. Dies ist nicht gut skalierbar, wenn Sie versuchen, Zehntausende von Anfragen zu bearbeiten.

Zum Glück ist die Erlang VM nicht so naiv. Wenn ein Prozess hochfährt, erhält er 2.000 Reduzierungen ( Funktionsaufrufe ). Jedes Mal, wenn eine Funktion vom Prozess aufgerufen wird, sinkt die Anzahl der Reduktion um 1. Sobald die Anzahl der Reduktionen null erreicht, wird der Prozess unterbrochen (er liefert implizit die Ausführung ), und er muss warten .

Da Erlang / Elixir keine Schleifen hat, muss das Iterieren über eine große Datenstruktur rekursiv erfolgen. Dies bedeutet, dass im Gegensatz zu den meisten anderen Sprachen, in denen Schleifen zu Systemengpässen werden, jede Iteration eine der Reduzierungen des Prozesses verbraucht und der Prozess die Ausführung nicht behindern kann.

Der Rest dieser Antwort geht über den Umfang der Frage hinaus, ist aber der Vollständigkeit halber enthalten.

Nehmen wir an, Sie haben jetzt einen Prozessor mit 4 Kernen. Anstatt nur einen Scheduler zu haben, startet die VM mit 4 Schedulern (1 für jeden Kern). Wenn genügend Prozesse ausgeführt werden, sodass der erste Scheduler die Last nicht in angemessener Zeit verarbeiten kann, übernimmt der zweite Scheduler die Kontrolle über die überschüssigen Prozesse und führt sie parallel zum ersten Scheduler aus.

Wenn diese beiden Scheduler die Last nicht in angemessener Zeit verarbeiten können, übernimmt der dritte Scheduler einen Teil der Last. Dies wird fortgesetzt, bis alle Prozessoren vollständig ausgelastet sind.

Darüber hinaus ist die VM intelligent genug, um keine Zeit für Prozesse zu verschwenden, die im Leerlauf sind - d. h. nur auf Nachrichten warten.

Es gibt einen ausgezeichneten Blog-Post von JLouis auf Wie Erlang Terminplanung macht . Ich empfehle es zu lesen.

    
Cody Poll 11.03.2016, 21:35
quelle

Tags und Links