2010-12-15 58 views
3

Par exemple, j'ai un programme qui consomme beaucoup de CPU. Je fais un plugin C qui peut interagir avec erlang. Je génère 16 threads avec SMP +16. Cela me donnera-t-il une performance similaire à quelque chose comme pthreads sur un multicore? Les threads n'ont pas besoin de communiquer les uns avec les autres. "C plugin" n'est pas clairement défini dans le contexte erlang.Quand je fais un plugin C pour erlang va-t-il tirer pleinement parti du système de frai? Est-ce que ça bloque?

Répondre

3

Soit vous écrivez un port qui forge un processus système.

Ou vous écrivez un pilote lié qui fonctionne dans le même contexte que le vm Erlang. Dans les deux cas, vous pouvez tirer parti des cpu multicœurs. Le premier cas repose uniquement sur le système d'exploitation pour placer les processus du système d'exploitation sur différents processeurs (dont tout système d'exploitation SMP décent devrait être capable).

Dans le second cas, je ne suis pas sûr, mais je m'attendrais à ce que les pilotes fonctionnent également sur différents cœurs de processeurs. Sauf si vous avez une bonne raison d'utiliser des pilotes liés et que vous savez exactement ce que vous faites, je recommande contre eux pour des raisons de complexité et de stabilité. Si un port se bloque Erlang est averti et peut le redémarrer ou prendre d'autres précautions. Si un conducteur plante tout Ermang vm est abattu dur. La question principale est quelle partie du problème que vous voulez résoudre dans Erlang, si vous utilisez erlang seulement pour démarrer vos "plugins" cela peut être beaucoup plus facile à résoudre que de démarrer des processus à partir du shell, puisque vos "threads" n'avez pas besoin de communiquer, pourquoi ne pas passer les paramètres sur la ligne de commande et les processus de travail de la fourchette à partir d'un script shell?

+0

Vous pouvez également écrire un NIF. –