septembre
2010
Pour être reconnu aujourd’hui, un nouveau langage se doit d’apporter des nouveautés dans le domaine de la programmation. Certains se distinguent en visant la facilité d’utilisation, ou en étant spécialisé pour une application précise. Mais ce à quoi tout le monde s’intéresse, c’est le parallélisme.
En effet, les ordinateurs de bureau ont maintenant en général deux processeurs à leur coeur, voire plus. Pour bénéficier au maximum des avantages de ces processeurs il faut recourir à la programmation parallèle.
Les langages généralistes les plus répandus comme C, C++, Java, Visual Basic ou C# utilisent le modèle des tâches d’exécution (threads) avec mémoire partagée comme base du parallélisme. Ce modèle est en bonne adéquation avec le fonctionnement des processeurs. De plus, ces langages proposent (sous forme de bibliothèque) des outils pour le passage de messages entre processus. Cela peut aussi être utilisé pour la communication entre tâches à l’intérieur d’un même processus.
Le problème de la mémoire partagée c’est qu’elle induit des difficultés pratiquement insolubles aux programmeurs qui veulent l’exploiter. Il y a de bonnes chances de créer des situations ou la performance chute, ou bien deux tâches s’attendent indéfiniment l’une l’autre à cause de verrous mis en place pour protéger l’intégrité de la mémoire partagée. Pour y remédier on a inventé des mécanismes sans verrou, qui ont leurs propres problèmes et ne peuvent être utilisés partout.
Pour dodo j’ai préféré privilégier un autre modèle, celui du passage de messages. Il est toujours possible d’avoir deux tâches qui s’attendent indéfiniment (deadlock) mais ce modèle a la réputation d’être plus facile à utiliser et de causer moins de soucis aux programmeurs.
J’ai aussi prévu d’intégrer un modèle de mémoire partagée qui a l’avantage de détecter les situations de blocage, celui proposé par le projet Athapascan du laboratoire ID-Imag. Chaque modèle a ses avantages et je pense que dodo peut bénéficier de la combinaison de ces deux approches.
Je parlerai aussi des variables versionnées et des transactions, des concepts importants pour les applications concurrentes.
Partie 2 – Le passage de messages
Partie 3 – Les tâches et les variables partagées
Partie 4 – Les transactions