2011-11-01 14 views
6

jeśli chcę zaimplementować serwer http.gc większej liczby scala actor

Tworzę nowego aktora na każde żądanie. Więc może skalować się w miarę aktualizacji mojego procesora.

, ale czy spowoduje to problem z użyciem pamięci? Mówi się, że aktor ma dziwne zachowanie podczas gc. kod będzie jakoś tak:

class Worker extends Actor { 
    def act = react { 
     case req : Request => perform(req);exit() 
    } 
} 


class HttpEventHandler{ 
    def onConnect(conn) = { 
     new Worker ! createRequest(conn) 
    }  
} 

Edit: zrobiłem test na ten temat, sprawdź mój testu w szczegółach http://jilen.iteye.com/blog/1231178

Odpowiedz

3

wind had some problems z Scala wbudowanej biblioteki aktor kilka lat temu, co skłoniło ich do napisania własnej biblioteki aktorów. Nie mam pojęcia, czy wbudowani aktorzy Scali mają nadal te same problemy, z jakimi boryka się wtedy społeczność Lift. Będziesz musiał przeprowadzić własne testy, aby się przekonać. (A może ktoś z niedawnym doświadczeniem może dzwonić).

Polecam sprawdzenie biblioteki Akka Actors. Ogólnie rzecz biorąc, myślę, że jest to ulepszenie wbudowanej implementacji Scali. Ma nawet funkcję spawn, która robi dokładnie to, co tu robisz (tworzenie aktora, który przetwarza pojedynczą wiadomość i umiera).

Edit:

Ty Listing w szczególności będzie prawdopodobnie wyciek aktorów, ponieważ ty nie są wyraźnie exit() aktorów kiedy skończysz z nimi.

Edit 2:

Okazuje się, że sama Scala ma spawn funkcji (Dzięki Stefan). Nie wiem, czy zachowuje się lepiej niż aktorzy Scali.

+0

Mam test o spawn, który działa idealnie bez przecieku pamięci. – jilen

+1

i scala wbudowany aktor nadal nie działa. W moim teście doświadczyłem OutOf Memory. – jilen

+0

@jilen W rzeczywistości twoja OOM może być, ponieważ nie nazywasz 'exit()', kiedy skończysz ze swoim aktorem. – leedm777

Powiązane problemy