Модель актера: в чем особенность erlang? Или зачем вам для этого нужен другой язык?

Я изучал эрланг, и в результате читал (хорошо, бегло бегло) о модели акторов.

Насколько я понимаю, модель акторов - это просто набор функций (выполняемых в облегченных потоках, называемых «процессами» в erlang), которые взаимодействуют друг с другом только посредством передачи сообщений.

Это кажется довольно тривиальным для реализации в C ++ или любой другой язык:

class BaseActor {
    std::queue<BaseMessage*> messages;
    CriticalSection messagecs;
    BaseMessage* Pop();
public:
    void Push(BaseMessage* message)
    {
        auto scopedlock = messagecs.AquireScopedLock();
        messagecs.push(message);
    }
    virtual void ActorFn() = 0;
    virtual ~BaseActor() {} = 0;
}

Каждый из ваших процессов является экземпляром производного BaseActor. Акторы общаются друг с другом только посредством передачи сообщений (а именно, путем нажатия). Акторы регистрируются с помощью центральной карты при инициализации, которая позволяет другим участникам находить их, а также позволяет центральной функции проходить через них.

Теперь я понимаю, что я упускаю, или, скорее, замалчиваю здесь одну важную проблему, а именно: недостаток средств для получения один Актер может неоправданно отнимать слишком много времени. Но из-за кроссплатформенных сопрограмм Какая вещь, из-за которой это сложно в C ++? (В Windows, например, есть волокна.)

Но есть ли что-то еще, что мне не хватает, или модель действительно настолько очевидна?

Я определенно не пытаюсь начать здесь войну пламени, я просто хочу понять, что мне не хватает, поскольку это, по сути, то, что я уже делаю, чтобы иметь возможность рассуждать о параллельном коде.

74
задан Jonathan Winks 12 November 2011 в 21:37
поделиться