Frage

Hat weiß jemand, ob es eine Art ‚Lastenausgleich‘ in der Erlang-Standardbibliothek ist? Ich meine, wenn ich ein paar wirklich einfache Operationen auf eine wirklich große Menge von Daten, die Overhead für jedes Element einen Prozess der Konstruktion wird größer sein als die Operation sequentiell auszuführen. Aber wenn ich die Arbeit in der ‚richtigen Zahl‘ von Prozess ausgleichen kann, wird es ein bessere Leistung, so bin ich im Grunde zu fragen, ob es eine einfache Möglichkeit, diese Aufgabe zu erfüllen.

By the way, hat jemand weiß, ob eine OTP-Anwendung eine Art Balance Last tut? Ich meine, in einer OTP-Anwendung gibt es das Konzept eines „Arbeitsprozess“ (wie ein Java-ish Thread Arbeiter)?

War es hilfreich?

Lösung

Die plists Modul wahrscheinlich macht, was Sie wollen. Es ist im Grunde eine parallele Implementierung des lists Modul, Designs als Drop-in-Ersatz verwendet werden. Sie können jedoch auch steuern, wie es parallelisiert seine Operationen, beispielsweise durch wie viele Arbeitsprozesse definieren, sollten usw. werden hervorgebracht.

Sie wahrscheinlich würde es tun, indem eine bestimmte Anzahl von Arbeitnehmern Berechnung auf der Länge der Liste oder die Last des Systems in Abhängigkeit etc.

Von der Webseite:

  

plists ist ein Drop-in-Ersatz für   die Erlang Modullisten, so dass die meisten   Listenoperationen parallel. Es kann   arbeiten auf jedes Element in parallel,   für IO-gebundenen Operationen auf Sublisten   Parallel dazu nimmt für Vorteil   Multi-Core Rechner mit einer CPU-bound   Operationen und über erlang Knoten,   für innerhalb eines Clusters parallizing. Es   behandelt Fehler und Knotenausfälle. Es   kann so konfiguriert, abgestimmt werden, und gezwickt   eine optimale Leistung zu erhalten, während   Minimierung der Overhead.

Andere Tipps

Siehe Module pg2 und pool.

pg2 implementiert ganz einfach verteilt Prozesspool. pg2:get_closest_pid/1 gibt „am nächsten“ pid, das heißt zufälligen lokalen Prozess, wenn vorhanden, andernfalls gelegentlicher Remote-Prozess.

pool implementiert Lastverteilung zwischen den Knoten mit dem Modul slave gestartet.

Es gibt keine, meiner Meinung nach, usefull generic Load-Balancing-Tool in OTP. Und vielleicht usefull es nur eine in bestimmten Fällen zu haben. Es ist leicht genug, um selbst eine Beurteilung zu implementieren. plists kann in den gleichen Fällen nützlich sein. Ich glaube nicht, parallel-Bibliotheken als Ersatz für die reale Sache. Amdahl werden Sie für immer verfolgen, wenn Sie diesen Weg gehen.

Die richtige Anzahl von Arbeitsprozessen ist auf die Anzahl der Disponenten gleich. Dies kann in Abhängigkeit von variieren, was anderen Arbeiten am System. Verwendung,

erlang:system_info(schedulers_online) -> NS

die Anzahl der Disponenten zu erhalten.

Der Begriff der Overhead, wenn das System mit einer Fülle von Arbeitsprozessen Überschwemmungen ist etwas fehlerhaft. Es gibt Overhead mit neuen Prozessen, aber nicht so viel wie mit os-Threads. Die Hauptoverhead-Nachrichten Kopieren zwischen Prozessen ist, kann dies seit dem binären der Referenz nur bei der Verwendung von Binärdateien gelindert wird gesendet. Mit eterms wird die Struktur expandierte zuerst, dann mit dem anderen Prozess kopiert.

Es gibt keine Möglichkeit, wie Kosten der Arbeit vorherzusagen mechanisch, ohne es zu messen beispiels es tun. Einige Personen müssen bestimmen, wie die Arbeit für einige Klassen von Aufgaben zu partitionieren. In Load Balancer Wort verstehe ich etwas ganz anderes als in Ihrer Frage.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top