63 votes

Toute L'Expérience Du Monde Réel À L'Aide De Logiciels De La Mémoire Transactionnelle?

Il semble qu'il y a eu récemment une hausse des intérêts de la STM (logiciel de la mémoire transactionnelle) les cadres et les extensions de langage. Clojure , en particulier, a une excellente application qui utilise MVCC (version multi-contrôle de la simultanéité) plutôt que d'un rouleau à commettre journal. GHC Haskell a aussi un très élégant STM monade qui permet également de l'opération de composition. Enfin, afin de sonner mon propre klaxon juste un peu, j'ai récemment mis en œuvre un cadre de la STM pour Scala qui applique de manière statique de référence des restrictions.

Tous ces éléments sont des expériences intéressantes, mais ils semblent être limités à ce seul domaine (l'expérimentation). Donc ma question est: n'avez-vous vu ou utilisé la STM dans le monde réel? Si oui, pourquoi? Quel genre d'avantages n'avait-il apporter? Quid des performances? (il semble y avoir beaucoup d'informations contradictoires sur ce point) utiliseriez-vous de la STM à nouveau ou vous préférez utiliser un autre simultanéité de l'abstraction comme des acteurs?

31voto

ADEpt Points 4405

J'ai participé à l'amateur de développement de la client BitTorrent en Haskell (nommé d'évoquer). Il utilise STM assez fortement pour coordonner les différents threads (1 par poste + 1 pour la gestion du stockage + 1 pour l'ensemble de la gestion).

Avantages: moins de serrures, un code lisible.

La vitesse n'était pas un problème, du moins pas en raison de l'utilisation de la STM.

Espérons que cette aide

28voto

Paul Johnson Points 8604

L'article "Logiciel de la Mémoire Transactionnelle: pourquoi est-il seulement une recherche de jouets?" ne parvient pas à regarder le Haskell mise en œuvre, qui est vraiment une grande négligence. Le problème pour la STM, comme l'article le souligne, c'est que les implémentations doivent choisir entre soit à la fabrication de toutes les variables accède transactionnelle, à moins que le compilateur ne peut pas prouver leur sécurité (qui tue la performance) ou de laisser le programmeur d'indiquer ceux qui sont à l'transactionnelle (qui tue la simplicité et la fiabilité). Cependant le Haskell mise en œuvre utilise la pureté de Haskell pour éviter le besoin de faire plus variable utilise transactionnelle, tandis que le type de système fournit un modèle simple avec l'application effective de la transaction des opérations de mutation. Ainsi, un programme Haskell pouvez utiliser de la STM pour les variables qui sont vraiment partagé entre les threads, tout en garantissant que les non-transactionnelle de l'utilisation de la mémoire est conservée en toute sécurité.

28voto

Don Stewart Points 94361

Nous l'utilisons assez souvent pour des haute simultanéité des applications à Galois (en Haskell). Il fonctionne, le son est largement utilisé dans le Haskell monde, et il n'a pas de blocage (même si bien sûr, vous pouvez avoir trop de contention). Parfois, nous réécrire les choses à utiliser MVars, si nous avons le droit de conception -- comme ils sont plus rapides.

Juste l'utiliser. C'est pas une grosse affaire. Pour autant que je suis concerné, la STM en Haskell est "résolu". Il n'y a pas plus de travail à faire. Si nous l'utilisons.

12voto

David Leuschner Points 146

Nous, factis research GmbH, utilisez Haskell STM GHC dans la production. Notre serveur reçoit un flux de messages à propos de la modification et de nouveaux "objets" à partir d'un clincal "serveur de données", il transforme cet événement de flux à la volée (en générant de nouveaux objets, de la modification des objets, de l'agrégation des choses, etc) et calcule de ces nouveaux objets doivent être synchronisés de connecter des iPads. Il reçoit également des entrées d'un formulaire à partir d'iPads qui sont traitées, a fusionné avec la "main stream" et aussi synchronisée avec les autres iPads. Nous sommes à l'aide de la STM pour tous les canaux et changeante des structures de données qui doivent être partagées entre les threads. Les Threads sont très léger, en Haskell, de sorte que nous pouvons avoir beaucoup d'entre eux sans impact sur les performances (pour le moment 5 pour iPad connexion). La construction d'une grande application est toujours un défi et il y avait beaucoup de leçons à apprendre, mais nous n'avons jamais eu de problèmes avec la STM. Il a toujours travaillé comme vous pouvez vous attendre naïvement. Nous avons dû faire un peu de sérieux réglage des performances, mais la STM n'a jamais été un problème. (80% du temps, nous avons essayé de réduire de courte durée des allocations et de l'ensemble de l'utilisation de la mémoire.)

La STM est un domaine où Haskell et le GHC runtime brille vraiment. Ce n'est pas juste une expérience et non pas pour les jouets des programmes.

Nous construisons une autre composante de notre clincal système de Scala et ont été en utilisant des Acteurs jusqu'à présent, mais nous sommes vraiment manquant de la STM. Si quelqu'un a l'expérience de ce que c'est que d'utiliser l'un de la Scala de la STM mises en œuvre dans la production, je serais ravi de vous entendre. :-)

4voto

gtroxler Points 43

Nous avons mis en œuvre l'ensemble de notre système (base de données en mémoire et de l'exécution) sur le dessus de notre propre STM mise en œuvre de C. Avant cela, nous avons eu quelques journaux et de verrouillage du mécanisme de base pour faire face à la concurrence, mais c'était une douleur à maintenir. Nous sommes très heureux avec la STM, puisque nous pouvons traiter toutes les opérations de la même manière. Presque toutes les serrures pourrait être supprimé. Nous utilisons STM maintenant pour presque n'importe quoi à n'importe quelle taille, nous avons même un gestionnaire de mémoire en œuvre sur le dessus.

La performance est bien, mais pour accélérer les choses nous avons maintenant développé un personnalisé du système d'exploitation en collaboration avec l'EPF de Zurich. Le système prend en charge la mémoire transactionnelle.

Mais il y a des défis causés par la STM. Surtout avec des opérations plus importantes et les points chauds, qui entraînent des transactions conflits. Si, par exemple, deux opérations de mettre un item dans une liste chaînée, un conflit inutile qui aurait pu être évité à l'aide d'un verrou de libre-structure de données.

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