Akka Kill vs. Stop Pill 대 Poison Pill?


212

Akka의 초보자 질문-Akka Essentials를 읽고 있습니다. 누군가 Akka Stop / Poison Pill과 Kill의 차이점을 설명해 주시겠습니까? 이 책은 "킬은 동 기적이다. 독약은 비동기 적이다"라는 작은 설명을 제공한다. 그러나 어떤 방법으로? 이 시간 동안 호출 액터 스레드가 잠깁니까? 살인, 정지 후 등의 행동에 아동 배우자에게 통보 되는가? 하나의 개념과 다른 개념의 사용 예?

많은 감사합니다!


12
rs_atl은 매우 잘 대답했습니다. 액터에 관한 것은 context.stop (self)조차도 동 기적이지 않습니다.
롤랜드 쿤

1
@RolandKuhn은 context.become어떻습니까?
Ionuț G. Stan

3
context.become다음 메시지에 적용 할 동작을 지정합니다. 즉, 현재 메시지가 처리 된 후에 적용됩니다. 이와 관련하여 그것은 매우 같습니다 context.stop(self).
Roland Kuhn

답변:


328

모두 stopPoisonPill배우를 종료하고 메시지 큐를 중지합니다. 액터가 메시지 처리를 중단하고 모든 자식에게 중지 호출을 보내고 종료 될 때까지 기다린 다음 postStop후크 를 호출합니다 . 모든 추가 메시지는 배달 못한 편지함 사서함으로 전송됩니다.

이 순서가 시작되기 전에 메시지가 처리되는 차이점이 있습니다. stop통화 의 경우 , 현재 처리중인 메시지가 먼저 완료되고 다른 모든 메시지는 삭제됩니다. 를 보낼 때 PoisonPill이것은 대기열에있는 다른 메시지 일 뿐이므로를 받으면 시퀀스가 시작됩니다 PoisonPill. 큐에서 그보다 앞서있는 모든 메시지가 먼저 처리됩니다.

대조적으로, Kill메시지는 액터가 ActorKilledException일반 수퍼바이저 메커니즘을 사용하여 처리되는 것을 던지게합니다 . 따라서 여기에서의 동작은 관리자 전략에서 정의한 내용에 따라 다릅니다. 디폴트는 액터를 정지시키는 것입니다. 그러나 메일 함은 지속되므로 행위자가 다시 시작할 때 실패를 유발 한 메일을 제외하고는 이전 메일이 계속 남아 있습니다.

문서의 '액터 중지', '액터 처치'섹션도 참조하십시오.

http://doc.akka.io/docs/akka/snapshot/scala/actors.html

그리고 감독 전략에 대한 추가 정보 :

http://doc.akka.io/docs/akka/snapshot/scala/fault-tolerance.html


4
훌륭한 답변 감사합니다, Akka 튜토리얼에 게시해야합니다!
LaloInDublin

16
ActorKilledException이 다시 시작이 아닌 중지로 확인되므로 기본이 아닌 수퍼바이저 전략을 사용하지 않으면 킬 메시지가 일반 수퍼바이저 메커니즘을 사용하여 액터를 다시 시작하지 않습니다.
lisak

실제로 액터를 재시작하는 유일한 방법은 예외를 던지기 때문에 상당히 성가시다.
lisak

또는 감독 행위자에서 다시 시작해야하는 행위자에게 PoisonPill을 전송하고 다시 시작하십시오.
lisak

사용하면 차이가 context.stop(self)있습니까?
BAR

1

가능하면 PoisonPill을 사용하십시오. 사서함에 저장되며 다른 메시지와 같이 사용됩니다. 액터 내에서 "context.stop (self)"를 사용할 수도 있습니다.


0

PoisonPill은 PoisonPill 이전에 사서함으로 수신 된 모든 메시지를 처리 ​​한 후에 행위자를 비동기 적으로 중지합니다.


20
아니요, Kill은 PoisonPill
Roland Kuhn

0

액터 스톱 및 포이즌 필을 사용하여 액터 처리를 중지하고 액터를 종료하여 액터를 완전히 종료 할 수 있습니다. x.stop은 akka receive 메소드에서 호출이며 postStop을 호출 한 후에 만 ​​액터 상태를 새 액터로 바꿉니다. x! PoisonPill은 액터가 실행 중일 때 처리를 중지하기 위해 액터에 전달하는 방법입니다 (권장). postStop을 호출 한 후 액터 상태를 대체합니다. x.kill은 액터를 종료하고 액터 경로에서 액터를 제거하고 전체 액터를 새 액터로 교체합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.