2011-09-19 5 views
1

모든 질문이 "Scala, Actors, what happens to unread inbox messages?"으로 시작되었습니다. 많은 배우가있는 대형 시스템에서 이러한 문제를 피하는 방법을 생각하고있었습니다.Scala-Actors, 메모리 누수를 피하는 것이 좋습니다.

react { 
    //all cases 
    case any: AnyRef => logMessageWithoutCase(any) 
} 

는 메모리 누수에서 좋은 회피인가 또는 일부 부작용이있을 수있다 :

나는 나 자신이 뭔가를 쓰는 발견?

UPDATE 1 @Alexey Romanov와 @Luigi Plinge 덕분에 시스템에 스팸 행위자가 있습니까?
다음과 같음 :

react{ 
    //all cases 
    case msg: Any => Spam!msg 
} 

마지막으로 스팸함에 기록되거나 데이터베이스에 저장됩니다. 나는 더 직관적 인 해결책이라고 생각한다.

+1

'AnyRef' 유형 제한을 제거하거나'Any'로 변경하여 모든 AnyVal 유형을 캡처하는 것이 좋습니다. –

+0

좋은 생각, 시도해 보겠습니다. –

답변

2

순차적 메시지 처리를 적용하기 때문에이 문제가 발생하지 않는 Akka actors을 사용하여 조사 할 수도 있습니다. 여기에서 처리되지 않은 메시지는 unhandled() 콜백에 전달되며 기본적으로 로그를 남기고 예외를 throw합니다.

또 다른 고려 사항은 Akka 액터가 현재의 scala.actor 패키지를 중간 용어로 대체한다는 것입니다. 현재 스칼라 액터가 아카 (Akka) 액터만큼 가벼지 않기 때문에 많은 액터가있는 대형 시스템에 특히 유용합니다.

2

로깅 메시지 은 부작용입니다. 로깅은 디스크 또는 데이터베이스에 기록해야하기 때문에 일치하지 않는 메시지가 많은 경우 성능이 저하 될 수 있습니다. 그렇지 않으면 예, 메모리 누수를 피할 수있는 좋은 방법입니다.

관련 문제