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?
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?
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 .
Jeśli zostanie zgłoszony wyjątek, tylko aktor (a nie powściągliwy wątek) umrze w prawo? – someguy
@someguy - Myślę, że to naprawdę zależy od implementacji puli wątków, ale tak. – ChaosPandion
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.
Chciałbym dodać do tego pytania: Jak lekkie są Scala Actors? – ziggystar
@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