Erlang Caractéristiques
De Erlang Programmation (2009):
Erlang la simultanéité est rapide et évolutive. Ses procédés sont plus léger que la machine virtuelle Erlang n'est pas de créer un OS thread pour chaque processus créé. Ils sont créés, planifiée et gérée dans la VM, indépendant du système d'exploitation. En conséquence, le processus de création, le temps est de l'ordre de quelques microsecondes et indépendante du nombre d'simultanément les processus existants. A comparer avec Java et C#, où, pour chaque processus de l'OS sous-jacent thread est créé: vous aurez une très concurrentiel des comparaisons, avec Erlang grandement surpassé les deux langues.
De la Simultanéité de la programmation orientée en Erlang (pdf) (slides) (2003):
Nous observons que le temps nécessaire pour créer un processus Erlang est constante 1µs jusqu'à 2 500 des processus; par la suite, il augmente à environ 3µs jusqu'à 30 000 processus. Les performances de Java et C# est indiqué en haut de la figure. Pour un petit nombre de processus, il faut environ 300µs de créer un processus. La création de plus de deux mille processus est impossible.
Nous voyons que jusqu'à 30 000 processus le temps d'envoyer un message entre deux processus Erlang est d'environ 0,8 µs. Pour C#, il faut environ 50µs par message, le nombre maximal de processus (qui était d'environ 1800 processus). Java a été encore pire, jusqu'à 100 processus a pris environ 50µs par message, par la suite, elle a augmenté rapidement à 10ms par message quand il y avait environ 1000 les processus Java.
Mes pensées
Je ne comprends pas tout, techniquement, pourquoi processus Erlang sont donc beaucoup plus efficace dans les nouvelles zones de frai des processus et ont beaucoup plus petite empreinte mémoire par processus. Le système d'exploitation et Erlang VM avez à faire de la planification, des changements de contexte, et de garder trace des valeurs dans les registres et ainsi de suite...
Tout simplement pourquoi ne sont pas les OS threads mise en œuvre de la même manière dans les processus d'Erlang? Ont-ils pour soutenir quelque chose de plus? Et pourquoi ont-ils besoin d'un plus grand espace de mémoire? Et pourquoi ont-ils ralentissement de la ponte et de la communication?
Techniquement, pourquoi sont des processus en Erlang plus efficace que les OS threads quand il s'agit de la ponte et de la communication? Et pourquoi pas des threads dans le système d'exploitation sera mis en œuvre et gérés de la même manière efficace? Et pourquoi ne OS threads ont plus de mémoire, plus de ralentissement de la ponte et de la communication?