2014-12-05 2 views
0

많은 근로자 (루프 수신)가있는 얼랑 (Erlang) 프로그램을 생각하고 있습니다.이 근로자는 거의 항상 동시에 자신의 상태를 조작합니다. 거대한 동시 작업자의 양은 너무 커서 mnesia 상태가 성능 상 문제를 일으킬 수 있으므로 각 루프의 args로 상태를 전달한 다음 나중에 기억 장치에 기록하십시오. 이것은 좋은 습관입니까? 이 작업을 수행하는 더 좋은 방법이 있습니까? (대충 말해서 객체 지향 언어의 속성을 가진 인스턴스와 같은 것을 찾고 있습니다)Erlang에서 상태를 구현하는 방법은 무엇입니까?

고마워요.

+2

실제로 프로그램에서 어떤 문제를 해결하려고하는지 알지 못하면이 질문에 대답 할 수 없습니다. 일반적으로 다른 프로세스의 요청을 처리하는 프로세스를 가진 대부분의 Erlang 프로그램은 자신의 상태를 알고있는 유일한 프로세스이며 상태는 반복적 인 루프에 인수로 전달됩니다. – zxq9

답변

0

얼랭 (Erlang)을 사용하면 프로세스를 전용 롤 역할의 배우로 보는 것이 좋습니다.

  • 는 로그인, 사용자 프로필, 친구 등의 정보를 유지,

    1. 가 인터넷을 통해 사용자와 연결 상태를 유지 : 염두에두고 당신은 당신이 같은 다른 종류의 문제를 분리 것을 확인할 수 , 쇼핑 카트 ...
    2. 로그 이벤트
    3. ... 당신이 상태 정보는 프로세스에 생존해야하는 경우 결정해야 할 각 역할에 대한

    .

    많은 경우 (프로세스 1의 경우) 필요하지 않으며 솔루션은 단순히 프로세스의 루프 기능 인수를 상태로 유지하는 것입니다. 나는 OTP 행동을 살펴 보길 권한다. gen_server와 gen_fsm은 이것을 위해 만들어졌다.

    사례 2는 분명히 프로세스 충돌이나 하드웨어 충돌에서 생존해야하는 영구 데이터를 조작합니다. 이 데이터는 dets, mnesia 또는 문제에 맞게 데이터베이스를 사용하여 저장됩니다 (Redis, CouchDB ...).

    외부 데이터베이스에 저장된 정보를 제한하는 것이 중요합니다. 그렇지 않으면 부작용이없는 매우 강력한 기능의 이점을 누릴 수 없습니다. 즉, 외부 정보에 의존하는 프로세스 동작을 갖는 것은 매우 나쁜 생각입니다.

  • 관련 문제