Question

J'ai commencé à étudier Erlang et trouver l'environnement d'exécution BEAM fascinant. Il est communément dit que Erlang, processus appartiennent à la langue plutôt que le système d'exploitation (ce qui signifie l'exécution, ce qui signifie BEAM dans ce cas). Ce sont la légèreté, « processus verts » qui Erlang devient célèbre. Il est en outre déclaré (à la page 5 cet article ) qui utilise BEAM un (1) par fil du système d'exploitation de base du processeur pour la programmation et un autre fil de système d'exploitation pour i / o. Alors je me demande: De quel fil ne les cycles de CPU nécessaires pour exécuter effectivement le code Erlang venir

De plus, si je suis en cours d'exécution sur une machine dual core, je me attends - après ce que je l'ai lu jusqu'à présent - pour voir trois fils (3) en cours d'exécution dans le cadre du processus BEAM: deux ordonnanceurs (un pour chaque core) et une i / o fil. Mais je vois 10. Parfois 11. Parfois, il commence à 13 et, comme des amplificateurs de haute qualité, va à 11.

Je suis confus. Toute idée sera apprécié.

Était-ce utile?

La solution

Après @ conseils de user425720, je posais ma question sur le LISTSERV Erlang questions. Il est également disponible en tant que Google Group . Kresten Krab Thorup de Trifork m'a répondu presque aussitôt. Je tiens à remercier vont à Kreston. Voici sa réponse. (Parenthèses et l'accent sont les miens.)

  

Voici AFAIK, le scénario de base:

     

Code Erlang sera exécuté dans le plus grand nombre   « fils verts » comme il y a des   processus; la limite de processus est   commandé par le drapeau + P (ligne de commande).

     

Les fils verts sont mappées sur S   fils de discussion, où S est le nombre de   noyaux / CPU. Le fait que ces   les discussions sont également appelés ordonnanceurs   peut sembler un peu   confusion, mais du point de machines virtuelles   voir qu'ils sont. A partir des années de développement   point de vue, ce sont les fils   d'exécuter votre code Erlang . le   nombre S peut être commandé avec   l'option + S à la ligne de commande erl.

     

Dans la présente décision d'addition, il y a un certain nombre   de soi-disant "Threads" Async. C'est   un pool de fil qui est utilisé par les E / S   les processus liés à des pilotes appelés à   réagir pour sélectionner / poll etc.   nombre de fils de asynch est dynamique,   mais limité par le drapeau + A.

     

Ainsi, les 11 fils de discussion que vous voyez sur une   dual-core peut être 2 ordonnanceurs, et 9   threads asynchrones. Par exemple.

     

En savoir plus sur les drapeaux .

Autres conseils

Erlang processus ne sont pas « vert » en tant que fils sont de couleur verte en java. processus Erlang sont des structures, qui ne se partagent la mémoire et ils sont maintenus par Erlang VM.

Il peut sembler étrange, mais ce document pourrait être « vieux » (même si bio à partir de 2007). Tout a changé autour de la libération R13 quand nous sommes tout nouveau traitement des files d'attente de temps d'exécution (avec des trucs d'équilibrage de dynamique et d'autres goodies). Voici quelques présentation par Ulf Wiger à son sujet http: //ulf.wiger.net/weblog/2009/01/23/erlang-programming-for-multicore/

En résumé, les processus sont complètement transparents et vous pouvez régler nombre de files d'attente de temps d'exécution et ordonnanceurs, mais la réalisation du système d'exploitation n'est pas intact. Je ne veux pas spéculer pourquoi il y a comme 11 de fils ..

EDIT: Je me trompe OS un peu:

  

+S Schedulers:SchedulerOnline

     

Définit le nombre de threads planificateur pour créer et threads planificateur de mettre en ligne lorsque le support SMP a été activé.

     

Plage valide pour les deux valeurs sont 1-1024. Si le système d'Erlang est en mesure de déterminer la quantité de processeurs logiques configurés et processeurs logiques disponibles, ordonnanceurs seront par défaut aux processeurs logiques configurés et SchedulersOnline seront par défaut aux processeurs logiques disponibles; sinon, les valeurs par défaut seront 1. Schedulers peut être omis si :SchedulerOnline est pas et vice-versa. La quantité de ordonnanceurs peut être modifiée en ligne lors de l'exécution par erlang:system_flag(schedulers_online, SchedulersOnline) .

     

...

     

Ce drapeau sera ignoré si l'émulateur ne prend pas en charge SMP activé (voir -smp drapeau).

d'ici: http://www.erlang.org/doc/man/ erl.html

EDIT2: Discussion intéressante sur la liste de diffusion Erlang-question sur les avantages et les inconvénients de plusieurs machines virtuelles contre plusieurs ordonnanceurs. Malheureusement, il est également à partir de 2008 et ne peut être valable avec d'énormes améliorations dans les nouvelles versions de Bureau du Procureur. http://www.erlang.org/ cgi-bin / ezmlm-cgi 4: mss: 38165: 200809: nbihpkepgjcfnffkoobf

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top