Produzenten- und Konsumentenproblem in Haskell?

7

Ich möchte, wie können wir Produzenten / Konsumenten in einer funktionalen Programmiersprache wie Haskell implementieren? und wie wird es sich von einer Imperativ-Sprache unterscheiden? Mein Verständnis der funktionalen Programmiersprache ist primitiv. Jede Hilfe wird geschätzt.

    
raj 12.08.2009, 19:46
quelle

3 Antworten

14

Eine Producer / Consumer-Abstraktion, die preemptive Threads und Nachrichten verwendet, die durch einen Channel laufen:

%Vor%

Sie würden ein ähnliches Modell in Erlang verwenden. Threads zur Darstellung des Verbrauchers und des Produzenten und eine gemeinsame Pipeline von Nachrichten zwischen ihnen, die jeweils asynchron agieren.

    
Don Stewart 12.08.2009 21:18
quelle
6

Ich füge zu dons 's ausgezeichnete Antwort hinzu, dass der zugrunde liegende Mechanismus hier etwas ist, das MVar genannt wird, und es ist ein imperativer, paralleler Container für einen Wert. Sie "putten" und "bekommen" in und aus einer MVar. Einen leeren MVar-Block zu bekommen, genauso wie einen vollen zu setzen. Es ist gleichzeitig ein Kommunikationsmechanismus und ein Synchronisationsmechanismus. Ich glaube, es wurde von Arvind im Rahmen des Monsoon / * t-Projekts erfunden. Es gibt eine schöne Buch von Nikhil and Arvind erklärt ihren pH-Dialekt von parallelem Haskell. Viele der Ideen wurden in GHC übernommen und das Buch ist lesenswert.

    
Norman Ramsey 12.08.2009 23:27
quelle
2

Neben den Stateful-Ansätzen, die von Norman und Don erwähnt werden, können Sie auch an normale Funktionsanwendung und Faulheit als Produzenten und Verbraucher denken.

Hier ist ein Produzent für die natürlichen Zahlen:

%Vor%

Und hier ist ein Verbraucher, der die Quadrate dieser Zahlen berechnet:

%Vor%

Hersteller wie yield return in C # oder Generatoren in Python können oft so ausgedrückt werden: als einfache faule Listen in Haskell.

    
Martijn 13.08.2009 21:39
quelle