2009-06-05 19 views
46

Jestem zdezorientowany pojęciem "iskry"Co to jest "iskra" w Haskell?

Czy to wątek w Haskell? A może to akcja tworzenia nowego wątku?

Dzięki wszyscy:

więc podsumować, iskry nie są nitką ale więcej jednostki obliczeń (zadania, aby umieścić go w kategoriach C#/Java). Tak więc jest to metoda Haskella polegająca na implementacji równoległości zadania.

Odpowiedz

32

Patrz A Gentle Introduction to Glasgow Parallel Haskell.

Równoległość wprowadza się GPH przez par combinator, który trwa dwa argumenty mają być ocenione równolegle. Wyrażenie p `par` e (tutaj stosujemy notację operatora infiltru Haskella) ma tę samą wartość, co e, i nie jest ścisłe w swoim pierwszym argumencie, tj. bottom `par` e ma wartość e. (bottom oznacza nie kończące się lub nieudane obliczenia). Jego dynamiczne zachowanie ma na celu wskazanie, że p może zostać ocenione przez nowy wątek równoległy, z ciągłą oceną wątku macierzystego e. Mówimy, że p został wywołany, a następnie wątek może zostać utworzony w celu oceny go, jeśli procesor staje się bezczynny. Ponieważ wątek nie jest koniecznie utworzony, p jest podobny do leniwej przyszłości.

[nacisk w oryginale]

+1

Kiedy ją czytam, "iskra" to nie tyle wątek, co obliczenie, które można uruchomić w wątku. Środowisko wykonawcze może mieć ustalone ograniczenie pułapu dla gwintów, które obracają się i oceniać iskry. – ephemient

+1

To nie jest poprawne. Iskry nie są nitkami. GHC obsługuje iskry, które są nieocenionymi obliczeniami w kolejce, wątki Haskella (lekkie wątki) i systemu operacyjnego. –

87

iskry nie nici. forkIO wprowadza wątki Haskell (które mapują na mniej rzeczywistych wątków systemu operacyjnego). Iskry tworzą wpisy w kolejkach roboczych dla każdego wątku, z którego będą wykonywać zadania do wykonania, jeśli wątek stanie się bezczynny.

W rezultacie iskry są bardzo tanie (możesz mieć ich miliardy w programie, podczas gdy prawdopodobnie nie będziesz mieć więcej niż milion wątków Haskell i mniej niż tuziny systemów operacyjnych na kilkunastu rdzeniach).

myśleć o tym tak:

spark model

+0

Zrobiłeś zdjęcie z tego miejsca: http://expcodes.com/125624? Niektóre atrybucje mogą być miłe. –

+37

@phresnel to oryginalne dzieło autorstwa mnie, stworzone dla tego pytania, używając inkscape. Twój link faktycznie wykorzystuje moją pracę bez atrybucji - jak możesz powiedzieć, patrząc na datę treści. –

+4

Widzę; Najczęściej zastanawiałem się, dlaczego powiązana treść wydaje się mieć większą rozdzielczość.Moja porażka nie patrzy na randkę, dziękuję za wyjaśnienie :) –

3

Jeśli rozumiem go poprawnie, iskra jest wpis w kolejce zadań wymagających pracy. Pula wątków pobiera wpisy z tej kolejki i uruchamia je. Zwykle istnieje jeden wątek na procesor fizyczny, więc ten schemat maksymalizuje przepustowość i minimalizuje przełączanie kontekstu wątku.

0

Wygląda na to, że jest podobny do "zadania" w Intel Threading Building Blocks.

+0

Dałabym +1, ale czuję, że potrzebuje trochę więcej, aby być odpowiedzią, ponieważ jest bardziej jak komentarz. Dodaj kilka linków i porozmawiaj o tym, jak koncepcje są podobne, koncentrując się na pomocy w zrozumieniu Sparków. – derekv