Ich bin in OCaml.
Ich versuche, kommunizierende Knoten zu simulieren, um zu sehen, wie schnell sich Nachrichten unter verschiedenen Kommunikationsschemata ausbreiten usw.
Die Knoten können 1. senden und 2. eine feste Nachricht erhalten. Ich denke, das Offensichtliche ist, jeden Knoten als einen separaten Thread zu haben.
Anscheinend können Sie Threads erhalten, um Nachrichten über das Ereignismodul und die Kanäle zu übermitteln, aber ich kann keine Beispiele dafür finden. Kann mir jemand in die richtige Richtung zeigen oder mir einfach ein einfaches Beispiel geben?
Vielen Dank.
Wenn Sie eine Simulation versuchen, dann brauchen Sie viel mehr Kontrolle über Ihre Knoten als einfach die Verwendung von Threads - oder zumindest ohne größere Probleme.
Meine subjektive Herangehensweise an das Thema wäre, eine einfache virtuelle Maschine mit einem einzigen Thread zu erstellen, um die volle Kontrolle über die Simulation zu behalten. Der einfachste Weg, dies in OCaml zu tun, ist die Verwendung einer monadähnlichen Struktur (wie zum Beispiel in Lwt):
%Vor%Sie können bessere Primitive erstellen, die Ihren Anforderungen entsprechen, z. B. die Eigenschaft "Sendezeit erforderlich" in Ihren Channels hinzufügen.
Der nächste Schritt ist die Definition einer Simulationsmaschine.
%Vor%Sie können die Engine erneut anpassen, um zu verfolgen, welcher Knoten welchen Thread ausführt, um die Knotenprioritäten beizubehalten, um einen Knoten entweder massiv langsamer oder schneller als andere zu simulieren, oder um einen Thread zufällig für die Ausführung auszuwählen Schritt und so weiter.
Der letzte Schritt ist das Ausführen einer Simulation. Hier werde ich zwei Fäden haben, die zufällige Zahlen hin und her senden.
%Vor%Ja, Sie können das Event -Modul von OCaml verwenden. Ein Beispiel für seine Verwendung finden Sie im Online-Buch O'Reilly-Buch .
Es klingt, als ob Sie an John Reppys Concurrent ML denken. Es scheint etwas Ähnliches für OCaml hier zu geben.
Die Antwort, die @Thomas gegeben hat, ist auch wertvoll, aber wenn Sie diese Art der gleichzeitigen Programmierung verwenden möchten, würde ich empfehlen, John Reppys Dissertation , die sehr gut lesbar ist und eine sehr klare Behandlung der Motivation hinter CML und einige wesentliche Anwendungsbeispiele bietet. Wenn Sie nicht an der Semantik interessiert sind, ist das Dokument immer noch lesbar, wenn Sie diesen Teil überspringen.
Tags und Links events channel ocaml message-passing