J'ai été à la recherche dans l'apprentissage de la erlang, et, en conséquence, avoir lu (bon d'accord, l'écrémage) sur le modèle de l'acteur.
Ce que je comprends, l'acteur modèle est tout simplement un ensemble de fonctions (exécuter dans un délai de légers fils appelé "processus" en erlang), qui communiquent les uns avec les autres via la transmission de message.
Cela semble assez facile à implémenter en C++, ou en toute autre langue:
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;
}
Avec chacun de vos processus en cours d'une instance d'un dérivé BaseActor. Les acteurs de communiquer les uns avec les autres seulement par passage de message. (à savoir, pousser). Les acteurs s'inscrire eux-mêmes au centre de la carte lors de l'initialisation qui permet à d'autres acteurs pour les trouver, et permet une fonction centrale à courir à travers eux.
Maintenant, je comprends que je suis absent, ou plutôt, dissimuler une question importante, à savoir: manque de rendement moyen d'un seul Acteur peut injustement consommer trop de temps. Mais la croix-plate-forme de coroutines la principale chose qui rend cette dur en C++? (Windows, par exemple, a des fibres.)
Est-il autre chose que je suis absent, mais, ou est le modèle vraiment ce évident?
Je ne suis certainement pas en essayant de démarrer une flamme de guerre ici, je veux juste comprendre ce que je suis absent, comme c'est essentiellement ce que j'ai déjà faites pour être en mesure à un peu raison sur code simultané.