Was ist ein "Funke" in Haskell
Ich bin verwirrt über den Begriff der "Funke"
Ist es ein thread in Haskell? Oder ist die Aktion erzeugt einen neuen thread ?
Danke an alle:
Also, um zusammenzufassen, die Funken sind nicht thread, sondern viel mehr eine Einheit der Bemessungsgrundlage (Aufgaben, um es in C#/Java-Bedingungen). Es ist also die Haskell Art und Weise der Umsetzung der task-Parallelität.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sehen Eine Sanfte Einführung in Glasgow Parallel Haskell.
[Hervorhebung im original]
Funken sind nicht threads.
forkIO
stellt Haskell-threads (die Karte nach unten auf weniger realen OS-threads). Funken erstellen von Einträgen in die Arbeit der Warteschlangen für jeden thread, von der aus Sie nehmen Aufgaben ausführen, wenn der thread im Leerlauf befindet.Als Ergebnis Funken sind sehr Billig (haben Sie vielleicht Milliarden von Ihnen in einem Programm, während Sie wahrscheinlich gewonnen ' T haben mehr als eine million Haskell threads, und weniger als ein Dutzend OS-threads auf ein halbes Dutzend Kerne).
Betrachten Sie es wie folgt:
-threaded
ist nicht einkompiliert ist, was passiert, um die Funken und dieforkIO
Aufrufe? In anderen Worten, ist der Haupt-thread einen eigenen "Haskell Lightweight-Thread"?Wenn ich es richtig verstehe, ein Funke ist ein Eintrag in eine Warteschlange mit den jobs, die Arbeit. Ein pool von threads, nehmen Sie Einträge aus dieser queue und führt Sie aus. In der Regel gibt es ein thread pro physischen Prozessor, so dass diese Regelung maximiert den Durchsatz und minimiert die thread-Kontextwechsel.
Wie es aussieht ist es ähnlich wie eine "Aufgabe" in Intel Threading Building Blocks.