2009-10-26 5 views
2

이벤트를 가입자에게 전달하는 이벤트 관리자 프로세스가 있습니다 (예 : http_session_created, http_sesssion_destroyed). Pid가 명명 된 프로세스 대신 사용되면 이벤트 관리자와 함께 작동하는 함수에 넣어야하지만 명명 된 프로세스가 사용되면 코드가 더 명확 해집니다.erlang의 이벤트 관리자 프로세스입니다. 명명 된 프로세스 또는 Pids?

어떤 변형이 맞습니까?

감사합니다.

답변

6

프로세스를 명명하는 프로세스에는 실제 차이점이 없지만 프로세스를 등록하면 프로세스가 글로벌하게됩니다. 본질적으로 당신은 시스템에 누군가가 사용할 수있는 글로벌 서비스가 있다고 말하고 있습니다.

당신의 설명에서 당신의 이름을 그들에게 줄 수 있습니다. 이 경우 나는 당신이 들고 다니는 다른 모든 주 데이터와 함께 그들의 pid를 레코드에 넣을 것입니다. 이것은 프로세스의 유형을 훨씬 잘 나타냅니다.

+0

상태의 레코드에서 이벤트 관리자 참조를 전달하면 해당 필드의 등록 된 이름에 대해 원자를 계속 사용할 수 있습니다. 따라서 이벤트 관리자가 충돌하여 이름을 다시 시작하면 자동으로 최신 관리자에게 이벤트를 보냅니다. 이벤트 관리자의 가동 중지 시간 동안 경고를 보내면 badarg 예외가 발생할 위험이 있습니다. – Christian

+0

물론 가능합니다. 나는 전 세계적으로 언급 될 의도가 없다면 사물의 글로벌 이름을주는 것을 좋아하지 않는다. 원래의 질문에서 그렇다고 말할 수는 없다. – rvirding

2

"구독자"프로세스의 고정 세트가있는 경우 등록 된 이름 IMO를 사용하십시오.

반대로 구독자가오고가는 게시/구독 종류가 있다면 그 정보를 추적하기위한 인프라가 필요하며이 시점부터 Pid() 또는 이름.

등록 된 이름을 사용하는 단점 중 하나는 "충돌"을 피하기 위해 코드 기반에서 추적해야한다는 것입니다. 따라서 여러분에게 달려 있습니다. 개인적으로, 저는 지명 된 프로세스를 선호하는 경향이 있습니다. 여러분이 말한 것처럼, 코드를 더 명확하게 읽게합니다. OTP는 상관 없어요.