Question

Quelqu'un sait s'il y a une sorte de « équilibreur de charge » dans la bibliothèque standard Erlang? Je veux dire, si j'ai quelques opérations très simples sur un ensemble très important de données, les frais généraux de la construction d'un processus pour chaque élément sera plus grand que réaliser la séquence de fonctionnement. Mais si je peux équilibrer le travail dans le « bon nombre » de processus, il fonctionnera mieux, donc je demande au fond s'il y a un moyen facile d'accomplir cette tâche.

Par ailleurs, quelqu'un sait si une demande du Bureau du Procureur fait une sorte de charge de l'équilibre? Je veux dire, dans une application OTP il y a le concept d'un « processus de travail » (comme un travailleur de fil java-ish)?

Était-ce utile?

La solution

Le module probablement plists fait ce que vous voulez. Il est essentiellement une mise en œuvre parallèle du module lists, la conception doit être utilisé en remplacement de drop-in. Cependant, vous pouvez également contrôler la façon dont il parallélise ses opérations, par exemple en définissant le nombre de processus de travail devrait être pondu etc.

Vous auriez probablement le faire en calculant un certain nombre de travailleurs en fonction de la longueur de la liste ou de la charge du système, etc.

Depuis le site Web:

  

plists est un remplacement de halte-accueil pour   les listes du module Erlang, ce qui rend plus   opérations de liste parallèle. Ça peut   fonctionner sur chaque élément en parallèle,   pour les opérations liées IO, le sous-listes   en parallèle, pour tirer profit de   machines multi-coeurs avec CPU-lié   opérations, et à travers des noeuds de Erlang,   pour parallizing l'intérieur d'un cluster. Il   gère les erreurs et les échecs de nœud. Il   peuvent être configurés, à l'écoute, et tordu   pour obtenir des performances optimales tout   réduisant au minimum les frais généraux.

Autres conseils

Voir les modules et pg2 pool.

pg2:get_closest_pid/1 implémente pool de processus distribué assez simple. Retourne slave « le plus proche » pid, à savoir processus local aléatoire si disponible, sinon processus à distance aléatoire.

<=> implémente l'équilibrage de charge entre les nœuds a commencé avec le module <=>.

Il n'y a pas, à mon avis, outil de UTILE équilibrage de charge générique BdP. Et peut-être utile que d'avoir un dans des cas spécifiques. Il est assez facile à mettre en œuvre un vous-même. plists peuvent être utiles dans les mêmes cas. Je ne crois pas en parallèle des bibliothèques en tant que substitut à la vraie chose. Amdahl vous hanter pour toujours si vous marchez ce chemin.

Le bon nombre de processus de travail est égal au nombre de ordonnanceurs. Cela peut varier en fonction de ce que d'autres travaux sont effectués sur le système. Utilisez,

erlang:system_info(schedulers_online) -> NS

pour obtenir le nombre de ordonnanceurs.

La notion de frais généraux lors de l'inondation du système avec une abondance de processus de travail est un peu défectueux. Il est en tête avec de nouveaux processus, mais pas autant que de fils-os. Les frais généraux principale est la copie des messages entre les processus, cela peut être atténué par l'utilisation des binaires depuis que la référence au binaire est envoyé. Avec Clauses la structure est tout d'abord expanded puis copiée dans l'autre processus.

Il n'y a aucun moyen de prédire comment le coût du travail mécanique sans mesurer par exemple le faire. Une personne doit déterminer comment partitionner travail pour une catégorie de tâches. En mot de équilibreur de charge que je comprends quelque chose de très différent de celui de votre question.

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