2010-03-13 12 views
11

Co sprawia, że ​​aktorzy są tak lekki?Scala: Dlaczego aktorzy są lekkością?

Nie jestem nawet pewien, jak działają. Czy nie są one oddzielnymi wątkami?

+0

Chciałbym dodać do tego pytania: Jak lekkie są Scala Actors? – ziggystar

+0

@ziggystar Z tego co rozumiem, aktorzy są tylko zadaniami na poziomie obiektu.Zgaduję, "jak lekka" zależy głównie od wielkości "skrzynki pocztowej". – someguy

Odpowiedz

17

Kiedy mówią, że są lekkie, oznacza to, że każdy aktor nie jest zmapowany do pojedynczego wątku.

JVM oferuje wspólne wątki pamięci z zamków jako podstawowej formy współbieżności abstrakcji. Ale wspólne wątki pamięci są dość ciężkie i ponoszą ciężkie kary za wydajność z ogólnych kosztów przełączania kontekstu. Dla implementacja aktor na podstawie odwzorowania jeden-do-jednego z JVM wątków, ładunek proces za Scala aktora nie będzie tak lekka, że ​​możemy tarło milion przypadków aktora zadaniu obliczeń. Stąd aktorów Scala zostały zaprojektowane jako lekkich obiektów zdarzeń, które się zaplanowanych i realizowanych na zasadzie bazowego pracownika puli wątków, które zostanie automatycznie przeskalowane, gdy wszystkie wątki blokować na długo działa operacje. W rzeczywistości Scala implementuje zunifikowany model aktorów - wątek oparty i oparty na zdarzeniach. Operatory Scala oferują dwie formy mechanizmów zawieszenia: - zawieszenie pełne stosu zawieszenie (wdrożone jako odbiór) i zawieszenie oparte na zamknięciu kontynuacyjnym (realizowane jako reakcja). W przypadku aktorów opartych na zdarzeniach, oczekiwanie na odpowiedź jest reprezentowane przez zamknięcie kontynuacyjne , tj. Zamknięcie, które przechwytuje resztę obliczeń aktora. Kiedy zawieszony aktor otrzymuje wiadomość, która odpowiada jednej z wzorów określonych w aktora The kontynuacją jest wykonywany poprzez szeregowanie Zadaniem jednego z wątków roboczych z podstawowej puli wątków. paper "Aktorzy ujednolicający wątki i zdarzenia " przez Hallera i Oderskiego omawiają szczegóły implementacji .

Source

+0

Jeśli zostanie zgłoszony wyjątek, tylko aktor (a nie powściągliwy wątek) umrze w prawo? – someguy

+0

@someguy - Myślę, że to naprawdę zależy od implementacji puli wątków, ale tak. – ChaosPandion

0

ważny punkt odniesienia Actors that Unify Threads and Events

Nie sądzę, że powinniśmy wzmocnić aktor jest lekki.

Po pierwsze aktorzy w oparciu o wątki są aktorami w każdym wątku, więc nie są w ogóle lekcy.

Wydarzenie oparte na wydarzeniach to moment, w którym zaczynamy odczuwać, że aktorzy są lekkością. jest lekki, ponieważ nie ma oczekującego wątku roboczego i przełączony na inny, działający wątek po prostu przełącza się z fragmentu pracy z danymi do innej pracy z danymi, w ten sposób obracając się na efektywnych obliczeniach.

Powiązane problemy