2016-12-02 2 views
0

저는 배우 모델을 처음 사용하고 간단한 예제를 작성하려고했습니다. Scala와 Akka를 사용하여 디렉토리 트리를 탐색하려고합니다. 프로그램은 모든 파일을 찾아 각 파일에 임의의 (그러나 빠른) 조작을 수행해야합니다.akka 액터를 사용하여 디렉토리 트리를 트래버스합니다.

액터를 사용하여 재귀를 모델링하는 방법을 확인하고 싶습니다. 탐색이 완료되면 어떻게 배우 시스템을 정상적으로 멈추게합니까? 메모리 부족을 방지하기 위해 액터 수를 제어하려면 어떻게해야합니까? 액터의 사서함이 너무 커지지 않도록 할 방법이 있습니까? 파일 작업을 실행하는 데 시간이 오래 걸리면 어떻게됩니까?

도움이 될 것입니다.

답변

2
  1. 액터는 근로자입니다. 그들은 일을하고 성과를 되돌려 주거나 다른 근로자들을 감독합니다. 일반적으로 배우에게 단일 책임을 부여하기를 원합니다.
  2. 이론적으로, 디렉토리의 내용을 처리하거나, 각 파일을 작업하거나, 발견 된 각 디렉토리에 대해 액터를 생성하는 액터를 가질 수 있습니다. 파일 처리 시간이 길어질수록 시스템이 오래 걸리기 때문에 이것은 좋지 않습니다.
  3. 액터 시스템을 정상적으로 중지시키는 데는 여러 가지 방법이 있습니다. Akka 문서에는 그 중 몇 가지가 언급되어 있습니다.
  4. 액터에 대한 요청을 대기열에 넣거나 액터가 임계 값 이하로 액터를 스폰하고 액터가 끝나면 카운트를 감소시키는 액터 관리자를 가질 수 있습니다. 이것은 감독자 배우의 일입니다. 감독자는 모니터하는 동안 한쪽에 앉아 있거나 작업을 파견 할 수 있습니다. Akka는 액터 모델을 통해 이러한 접근 방식을 구현합니다.
  5. 예, 사서함의 크기를 제어하는 ​​여러 가지 방법이 있습니다. 설명서를 읽으십시오.
  6. 순진한 재귀 순회와 같이 잘못된 방식으로 파일 조작을하면 다른 처리를 차단할 수 있습니다.

먼저주의해야 할 점은 파일 계층 구조를 탐색하고 개별 파일을 처리하는 두 가지 작업 유형이 있다는 것입니다. 첫 번째 구현에서 액터 A와 액터 B의 두 액터를 만듭니다. 액터 A는 파일 시스템을 가로 지르고 처리 할 파일의 경로로 액터 B에 메시지를 보냅니다. 액터 A가 완료되면 액터 B에 "모두 완료"표시기를 전송하고 종료합니다. 행위자 B가 "완료 됨"표시기를 처리하면 종료됩니다. 이것은 액터 사용법을 배우는 데 사용할 수있는 기본 구현입니다.

다른 모든 것은 이에 대한 변형입니다. 다음 변형은 공유 사서함이있는 두 명의 액터 B를 만들 수 있습니다. 셧다운은 좀 더 복잡하지만 여전히 직관적입니다. 다음 변형은 하나 이상의 배우 B에게 작업을 배급하는 디스패처 배우를 만드는 것입니다. 다음 변형본에서는 여러 액터 A를 사용하여 파일 시스템을 탐색하고 수퍼바이저가 생성되는 액터 수를 제어합니다.

이 개발 계획을 따르면 Akka 사용 방법에 대해 많은 것을 배울 수 있으며 모든 질문에 대답 할 수 있습니다.