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

모두 stop와 PoisonPill배우를 종료하고 메시지 큐를 중지합니다. 액터가 메시지 처리를 중단하고 모든 자식에게 중지 호출을 보내고 종료 될 때까지 기다린 다음 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.