Kiedy należy stosować Model aktora?

Kiedy należy stosować model aktora ?

To z pewnością nie gwarantuje bezawaryjnego środowiska.

Aktor A może czekać na wiadomość od B, podczas gdy B czeka na A.

Ponadto, jeśli aktor musi upewnić się, że jego wiadomość została przetworzona przed przejściem do następnego zadania, będzie musiał wysłać wiadomość i poczekać na wiadomość" twoja wiadomość została przetworzona " zamiast prostego blokowania.

What ' s the power of the modelka?

Author: nazar_art, 2009-11-29

2 answers

Biorąc pod uwagę pewien problem współbieżności, czego byś szukał, aby zdecydować, czy używać aktorów, czy nie?

Najpierw chciałbym zdefiniować problem... czy motywacja podstawowa jest przyspieszeniem zagnieżdżonej pętli lub rekurencji? Jeśli tak, proste podejście oparte na zadaniach lub podejście w pętli równoległej będzie prawdopodobnie działać dobrze dla ciebie (zamiast aktorów).

Jeśli jednak masz bardziej złożony system, który obejmuje zależności i koordynowanie stanu współdzielonego, podejście aktora może pomóc. W szczególności poprzez użycie aktorów i semantyki przekazywania wiadomości często można uniknąć używania jawnych blokad DO OCHRONY współdzielonego stanu poprzez faktyczne tworzenie kopii tego stanu (wiadomości) i reagowanie na nie.

Możesz to zrobić dość łatwo z klasycznymi problemami synchronizacji, takimi jak filozofowie jadalni i problem śpiących fryzjerów. Ale możesz również użyć "aktora", aby pomóc w bardziej nowoczesnych wzorach, tzn. twoja fasada może być aktorem, twój widok modelu i kontroler mogą być również aktorami, które komunikować się ze sobą.

Kolejną rzeczą, którą zaobserwowałem, jest to, że semantyka aktora jest ucząca się przez większość programistów i "bezpieczniejsza" niż ich zablokowane odpowiedniki. Dzieje się tak, ponieważ podnoszą poziom abstrakcji i pozwalają skupić się na koordynowaniu dostępu do tych danych, a nie na ochronie wszystkich dostępu do danych za pomocą blokad. Jako przykład, wyobraź sobie, że masz prostą klasę z członkiem danych. Jeśli zdecydujesz się umieścić blokadę w tej klasie w celu ochrony dostępu do tego elementu danych wtedy wszystkie metody tej klasy będą musiały upewnić się, że uzyskują dostęp do tego elementu danych pod blokadą. Staje się to szczególnie problematyczne, gdy inni (lub ty) zmodyfikują klasę w późniejszym terminie, muszą pamiętać , aby użyć tej blokady.

Z drugiej strony, jeśli ta klasa staje się aktorem, a element danych staje się buforem lub portem, z którym komunikujesz się za pomocą wiadomości, nie musisz pamiętać, aby wziąć blokadę, ponieważ semantyka jest wbudowana w bufor i będziesz bardzo wyraźnie wiedzieć, czy masz zamiar zablokować na podstawie typu bufora.

-Rick

 23
Author: Rick,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-29 01:04:02

Użycie aktora jest "naturalne" w co najmniej dwóch przypadkach:

  1. Kiedy możesz rozłożyć swój problem w zestaw niezależnych zadań.
  2. Kiedy możesz rozłożyć swój problem w zestaw zadań połączonych przejrzystym worflow (tj. dataflow programming ).

Na przykład, jeśli przetwarzasz złożone dane za pomocą serii filtrów, łatwo jest użyć potoku aktorów, w którym każdy aktor otrzymuje dane od aktora i ustawia dane do aktora aktor

Oczywiście ten przepływ danych nie może być liniowy i jeśli krok jest powolny w potoku, możesz zamiast tego użyć puli aktorów wykonujących tę samą pracę. Innym sposobem rozwiązania problemów równoważenia obciążenia byłoby użycie zamiast podejścia opartego na zapotrzebowaniu zorganizowanego z rodzajem wirtualnego systemu Kanban .

Oczywiście będziesz potrzebował synchronizacji między aktorami w prawie wszystkich ciekawych przypadkach, ale w przeciwieństwie do klasycznego podejścia wielowątkowego, ta synchronizacja jest naprawdę "Beton". Możesz sobie wyobrazić facetów w fabryce, wyobrazić sobie Możliwe problemy (pracownicy kończą pracę, operacje upstream są zbyt szybkie, a produkty pośrednie potrzebują ogromnego miejsca do przechowywania itp.) Przez analogię, można wtedy łatwiej znaleźć rozwiązanie.

 18
Author: paradigmatic,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-29 08:07:17