- Cet article examine les défis liés à l’utilisation de Rust pour des logiciels en espace utilisateur avec une très forte concurrence.
- Le modèle asynchrone de Rust est conçu pour gérer deux concepts clés de l’informatique moderne : la concurrence et le parallélisme.
- Le parallélisme consiste à exécuter du code simultanément sur plusieurs CPU.
- La concurrence consiste à décomposer un problème en parties indépendantes pouvant s’exécuter sans ordre précis, ou avec un ordre partiel.
- L’article souligne les limites de l’utilisation de plusieurs processus pour la concurrence, en raison du coût élevé de la communication inter-processus.
- Les threads, qui sont des processus partageant la même mémoire, sont présentés comme une alternative, mais ils peuvent introduire des problèmes complexes comme les conditions de course et les interblocages.
- L’article de Tony Hoare publié en 1978, "Communicating Sequential Processes", proposait d’utiliser des files d’attente ou des canaux pour que les threads s’envoient des messages, offrant plusieurs avantages comme une isolation de type processus et un débogage plus simple.
- La bibliothèque standard de Rust inclut des canaux sous
std::sync::mpsc::sync_channel.
- Cependant, pour des problèmes exigeant un très haut niveau de concurrence, comme un serveur web connecté à des dizaines de milliers d’utilisateurs, les threads peuvent ne pas suffire.
- Pour ce type de situation, Rust utilise le modèle
async/await : lorsqu’une fonction est marquée asynchrone, elle renvoie un future ou une promesse, sur lequel on peut attendre afin de produire un résultat.
- Malgré ses avantages, le Rust asynchrone présente des défis, notamment la nécessité de convaincre le compilateur que tout se passera bien, ce qui peut être plus difficile qu’avec des threads bruts.
- L’usage du "comptage de références atomique", ou Arc, est proposé comme solution, mais ce n’est pas une panacée car cela peut entraîner des problèmes similaires à ceux des ramasse-miettes.
- L’article conclut qu’en dépit des points forts de Rust dans d’autres domaines, ce n’est peut-être pas l’outil optimal pour les logiciels en espace utilisateur à très grande concurrence.
1 commentaires
Discussion sur Hacker News
tokiopour beaucoup de choses.Arcen Rust n’est pas inconnu par nature, mais dépend de l’endroit et de la manière dont on le détient, et suggère que l’auteur essaie d’imposer à Rust son ancien modèle mental.async-scopedpour attraper la plupart des bugs qui auraient été écrits en C++ constitue un compromis raisonnable.