Un modèle à acteurs peut être mis en œuvre avec des langages tels que erlang, go, alors qu'il est quasiment inenvisageable avec des threads classiques.
Ce qu'on observe en faisant tourner le benchmark cité plus haut (https://github.com/jeanparpaillon/actors_benchmark) est que, avec erlang:
* le temps de 'fork' est constant / nb threads;
* le temps du passage de message est ~quasiment~ constant également / nb threads.
Allez, pour être plus précis, le résultat du benchmark avec 103, 104, 105, 106 et 107 threads:
$ ZOG_THREADS=1000 make
erl +P 1200 -noshell -eval 'zog:start('1000','1000').'
Setup : 0.001 s (1.001001001001001 us per spawn)(999 spawns)
Run : 0.003 s (1.5007503751875937 us per msg)(1999 msgs)
$ ZOG_THREADS=10000 make
erl +P 10200 -noshell -eval 'zog:start('10000','1000').'
Setup : 0.017 s (1.7001700170017002 us per spawn)(9999 spawns)
Run : 0.018 s (1.8001800180018002 us per msg)(9999 msgs)
$ ZOG_THREADS=1000000 make
erl +P 1000200 -noshell -eval 'zog:start('1000000','1000').'
Setup : 1.355 s (1.355001355001355 us per spawn)(999999 spawns)
Run : 1.255 s (1.255001255001255 us per msg)(999999 msgs)
$ ZOG_THREADS=10000000 make
erl +P 10000200 -noshell -eval 'zog:start('10000000','1000').'
Setup : 23.255 s (2.325500232550023 us per spawn)(9999999 spawns)
Run : 27.24 s (2.724000272400027 us per msg)(9999999 msgs)
On voit une augmentation du temps de 'fork' (spawn) et passage de message entre 1 et 10 millions de threads (CPU i7-7820HQ, 32GB RAM).
Au passage, je suis preneur de toute PR pour étoffer ce benchmark avec d'autres mises en œuvres / langages. (Attention, avec Java, la machine peut vite se freezer...).
"Liberté, Sécurité et Responsabilité sont les trois pointes d'un impossible triangle" Isabelle Autissier
[^] # Re: Comparatif avec d'autres langages orientés "actor model"
Posté par Jean Parpaillon . En réponse à la dépêche Sortie d’Erlang/OTP 24. Évalué à 3.
Je parle d'ordre de grandeur ici.
Un modèle à acteurs peut être mis en œuvre avec des langages tels que erlang, go, alors qu'il est quasiment inenvisageable avec des threads classiques.
Ce qu'on observe en faisant tourner le benchmark cité plus haut (https://github.com/jeanparpaillon/actors_benchmark) est que, avec erlang:
* le temps de 'fork' est constant / nb threads;
* le temps du passage de message est ~quasiment~ constant également / nb threads.
Allez, pour être plus précis, le résultat du benchmark avec 103, 104, 105, 106 et 107 threads:
On voit une augmentation du temps de 'fork' (spawn) et passage de message entre 1 et 10 millions de threads (CPU i7-7820HQ, 32GB RAM).
Au passage, je suis preneur de toute PR pour étoffer ce benchmark avec d'autres mises en œuvres / langages. (Attention, avec Java, la machine peut vite se freezer...).
"Liberté, Sécurité et Responsabilité sont les trois pointes d'un impossible triangle" Isabelle Autissier