32 votes

Pourquoi est-Scala bon pour la simultanéité?

Quels simultanéité des opérateurs, ou est fonctionnel style de programmation de bon pour la simultanéité? Et pourquoi?

48voto

Vasil Remeniuk Points 12487

Pour le moment, Scala prend déjà en charge les deux principales stratégies de concurrence d'accès basé sur le thread de la concurrence (dérivé de Java) et type-safe acteurs de la concurrence (inspiré par Erlang). Dans le futur proche (Scala 2.9), il y aura deux gros ajouts que:

  • Logiciel de la Mémoire Transactionnelle (la base de la simultanéité dans Clojure, et probablement le deuxième plus populaire de la simultanéité de style en Haskell)
  • En parallèle des Collections (sans entrer dans les détails, ils permettent à la parallélisation de collection de base transormers, comme foreach ou map entre plusieurs threads).

Les acteurs de la syntaxe (la simultanéité des opérateurs) est fortement influencé avec Erlang (avec quelques ajouts importants) - en ce qui concerne la bibliothèque que vous utilisez (standard acteurs, Akka, Ascenseur, scalaz), il y aura des combinaisons différentes de la question et les points d'exclamation: ! (dans la plupart des cas, pour l'envoi d'un message à sens unique) -, !!, !?, etc.

En plus de cela, de première classe de fonctions pour rendre votre vie plus facile, même lorsque vous travaillez avec des vieux Java simultanéité des cadres: ExecutorService, Fork-Join Cadre, etc.

Au-dessus de tous, qui se dresse de l'immutabilité qui simplifie la simultanéité beaucoup, rendre le code plus prévisible et plus fiable.

16voto

leonm Points 4836

Il y a un certain nombre de fonctionnalités de langage qui font de la Scala bon pour la concurrence. Par exemple:

  • La plupart des structures de données sont immuables et ne nécessitent pas quelque chose de spécial pour l'accès simultané.
  • Le style fonctionnel est une très bonne façon de faire très opérations simultanées.
  • Scala comprend vraiment à portée de main "acteur" cadre qui permet à simultanée des opérations asynchrones.

Pour en savoir plus:

http://www.ibm.com/developerworks/java/library/j-scala02049.html

http://blog.objectmentor.com/articles/2008/08/14/the-seductions-of-scala-part-iii-concurrent-programming

http://akkasource.org/

10voto

Daniel C. Sobral Points 159554

Eh bien, il y a la hype et il y a la réalité. Scala a obtenu une renommée pour être bon pour la simultanéité, car c'est un langage fonctionnel et en raison de ses acteurs, de la bibliothèque. Les langages fonctionnels sont bons pour la simultanéité parce qu'ils se concentrent sur l'immutabilité, qui aide simultanées des algorithmes. Les acteurs ont obtenu leur réputation parce qu'ils sont la base d'Erlang bilan massivement simultanée des systèmes.

Donc, dans un sens, Scala, à la réputation est due à un "moi aussi" des succès techniques. Pourtant, il y a quelque chose que la Scala n'apporter à la table, qui est de sa capacité à soutenir de tels ajouts à la langue à travers les bibliothèques, ce qui le rend capable de s'adapter et d'adopter de nouvelles techniques comme elles sont conçues.

Les acteurs ne sont pas indigènes à la Scala, et pourtant il y a déjà là de différentes bibliothèques que tous semblent être. Ni est la mémoire transactionnelle, mais, encore une fois, il y a déjà des bibliothèques qui regardent comme ils sont.

Ils, ces bibliothèques sont encore disponibles pour java, mais là, ils sont maladroit à utiliser.

Ainsi donc, le secret n'est pas tellement ce qu'il peut faire, mais qu'il lui donne une apparence facile.

7voto

darioo Points 23903

Le gros mot-clé ici est l'immuabilité. Voir cette page du Wiki. Depuis toute variable peut être définie comme mutables ou immuable, c'est une grande victoire pour la concurrence, car si un objet ne peut pas être changé, il est thread-safe et donc l'écriture simultanée de programmes est plus facile.

3voto

timday Points 14860

Juste de la pluie sur tout le monde, le défilé un peu, voir à cette question.

J'ai double-codé un juste quelques multithread choses en Scala (principalement à l'aide de contrats à Terme, un peu avec des Acteurs trop) et C++ (à l'aide de TBB) depuis (surtout du Projet Euler problèmes). Tableau général semble être que la Scala besoins ~1/3 le nombre de lignes de code C++ solution (et est plus rapide à écrire), mais le C++ solution sera de ~x10 plus rapide d'exécution (sauf si vous allez à certains efforts pour éviter tout objet "désabonnement", comme indiqué dans la version rapide dans la réponse citée ci-dessus, mais à ce point, vous perdez une grande partie de l'élégance de la Scala). Je suis toujours sur 2.7.7 esprit vous; n'avez pas essayé Scala 2.8 encore.

Utilisation de Scala a été ma première vraie rencontre avec une langue qui mettent fortement l'accent sur l'immuabilité et je suis impressionné par son pouvoir de simplifier énormément le modèle mental que vous avez à maintenir de l'objet "machines d'état" alors que la programmation (et cela leur fait de codage pour la simultanéité plus facile). C'est certainement influencé la façon dont je m'approche de codage C++.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X