Codziennie pracuję z akką od 7-8 miesięcy. Kiedy zaczynałem, pracowałem nad aplikacjami i zauważyłem, że aktorzy będą wykorzystywani praktycznie w dowolnym miejscu w systemie aktorów do komunikacji między większością obiektów. Więc zrobiłem to samo - podkręć innego aktora dla x / y / z.
Wydaje mi się, że może to być zbyt niedyskryminujące, co zwiększa złożoność tam, gdzie nie jest potrzebne - ale nie mogę znaleźć dyskusji na temat tego, gdzie należy zastosować aktorów kontra zwykłą synchronizację, a nawet asynchroniczną logikę poprzez futures. Zacząłem się zastanawiać, kiedy mój współpracownik wspomniał o czymś podobnym. Niedawno zdałem sobie sprawę z kilku przypadków, w których zastanawiałem się nad zadaniem, a następnie uniknąłem tworzenia innego aktora, ponieważ mogłem bezpiecznie osiągnąć ten sam wynik w niezmiennej implementacji - np. Coś takiego jak uzyskiwanie wartości konfiguracyjnych z bazy danych lub pliku w miejscu, do którego bardzo rzadko i gdzie uzyskujesz dostęp oczekiwanie na wynik to rzeczywisty przypadek użycia.
W szczególności wydaje mi się, że w każdym przypadku, gdy grasz z niezmiennym stanem, aktorzy tworzą złożoność i ograniczają przepustowość - na przykład czystą funkcję w obiekcie można wywoływać jednocześnie bez żadnego ryzyka przy dowolnym poziomie współbieżności, jednak aktor może przetwarzać tylko jedną wiadomość na raz. Alternatywnym rozwiązaniem jest zaparkowanie wątku, jeśli musisz poczekać na wynik, chyba że zaczniesz używać kontraktów futures, ale w przypadkach, w których nie musisz się martwić o asynchroniczne przesyłanie wiadomości lub skalowanie, wydaje się, że zatrudnienie aktora może być przesadą.
Więc moje pytanie brzmi - czy jest zły czas na wykorzystanie aktorów? Jestem ciekawy, jak wygląda Erlang i naprawdę chciałbym wglądu innych ludzi. Lub jeśli istnieją jakieś zasady dotyczące korzystania z aktora.
ask
wcieleniem się w rolę aktora a zwykłym użyciem równiny Future
.