Wzór aktora - co dokładnie stanowi

Robię jakiś objective-C / iOS development I słyszałem kilka odniesień do wzorca aktora. W książce Big Nerd Ranch pisze:

Obiekt actor jest używany, gdy masz długie zadanie i niektóre kod, który musi zostać wykonany po jego zakończeniu. Tego rodzaju obiekt otrzymuje informacje potrzebne do wykonania zadania i oddzwania do wykonaj, gdy to zadanie zostanie wykonane. Aktor działa na własnym wątku bez dalszego wprowadzania i ulega zniszczeniu, gdy jest skończone.

Aktor jest używany w połączeniu z wywołaniem sieciowym. Czy w ten sposób wykorzystuje się przede wszystkim aktora? Czy delegacja jest wzajemnie wykluczająca się czy komplementarna? Definicja aktora wydaje się bardzo szeroka i staram się lepiej zrozumieć, co ona oznacza. Czy możliwe jest posiadanie aktora w środowisku nie-OO?

Author: 卢声远 Shengyuan Lu, 2012-07-26

1 answers

Ta definicja aktora wydaje się trochę restrykcyjna. Na pewno nie radzi sobie z aktorami w stylu Erlanga (lub wierzę, że aktorzy w stylu Scali). Z mojego doświadczenia wynika, że aktor jest czymś, co:

  • wysyła i odbiera wiadomości (każdy aktor ma skrzynkę pocztową)
  • nie dzieli pamięci z innymi aktorami
  • jest zaplanowane na podstawie kaprysów runtime. Aktor może mieć własny wątek, ale jest bardziej prawdopodobne, że kilku aktorów uczestniczy w kooperacji wielowątkowość w jednym wątku, a może nawet udział w wielowątkowości wstępnej.

Ale zasadniczo, aktor jest wolnym działającym kawałkiem kodu, który może odbierać wiadomości ze swojego środowiska i może wysyłać wiadomości z powrotem do swojego środowiska.

Aktorzy są używane za każdym razem, gdy potrzebujesz dużo (i wiele) stateful małych procesów. Sieć jest powszechnym przypadkiem użycia, ponieważ nie chcesz przydzielać całego wątku do każdego połączenia. Chcesz czegoś lżejsza waga, więc przydzielasz aktora do każdego połączenia, a następnie planujesz aktorów na mniejszej puli wątków. Ale networking nie jest z pewnością jedynym zastosowaniem aktora.

W Erlangu aktor jest funkcją. Funkcja prawdopodobnie wywoła samą siebie (więc jest to w zasadzie pętla nieskończona) i prawdopodobnie ma czysty sposób na samoczynne zakończenie (pętla nieskończona ma warunek "break"). Pętla zazwyczaj czeka na wiadomość z systemu, przetwarza ją, a następnie wysyła wiadomości do reszty systemu. Biblioteka OTP Erlang ma pewne abstrakcje, które eliminują konieczność nawet zapisu pętli, więc aktor OTP jest zaimplementowany jako zestaw wywołań zwrotnych. W ten sposób aktor OTP wygląda jak obiekt.

 55
Author: Daniel Yankowsky,
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
2012-07-26 18:38:10