Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Parallélisme simple et élégant avec Erlang et Elixir

matehat
April 30, 2014

Parallélisme simple et élégant avec Erlang et Elixir

matehat

April 30, 2014
Tweet

Other Decks in Programming

Transcript

  1. Parallélisme vs. Concurrence • Le parallélisme s’exprime lorsque plusieurs unités

    d’exécution coopèrent simultanément à la réalisation d’une ou plusieurs tâches • Un programme ou système est dit concurrent si les périodes d’exécution de différentes tâches peuvent se chevaucher Concurrence Parallélisme
  2. La concurrence, c’est bien • Les tâches qui brettent ne

    font pas bretter le programme • requêtes web, lectures de fichiers, requêtes à une BD • Les programmes tirent parti des derniers avancements au niveau des processeurs • architecture multi-cœurs, « hyperthreading »
  3. La concurrence, c’est difficile? • L’accès aux ressources ou structures

    de données partagées est risqué et doit être contrôlé adéquatement • Les différents acteurs doivent synchroniser leur travail • L’aspect concurrent d’un programme est souvent implicite, compliquant la tâche du programmeur
  4. La concurrence, c’est facile! • « Erlang is a concurrent

    functional language, tailored for large-scale distributed and fault-tolerant control software. » — quelqu’un • « […] Erlang provides language-level features for creating and managing processes with the aim of simplifying concurrent programming. Though all concurrency is explicit in Erlang, processes communicate using message passing instead of shared variables, which removes the need for explicit locks » — quelqu’un d’autre, sur Wikipedia
  5. La concurrence, c’est facile! • Impossible de partager une même

    structure de donnée entre acteurs • Des messages sont plutôt échangés entre acteurs • Les structures de données sont immutables • Le style fonctionnel de programmation de Erlang/ Elixir rend explicites les effets de bord • Il est aussi simple de démarrer un acteur localement que sur un autre continent.
  6. « Concurrency’s Holy Grail »? Non Son mode préemptif de

    concurrence le rend inadéquat pour du « number crunching », un cas d’application très important du parallélisme … mais convient très bien pour des services web, les télécommunications, la messagerie instantané, etc. …et aussi pour certaine technique d’intelligence artificielle
  7. … et Elixir là-d’dans? • Simplifie la syntaxe et la

    rend plus approchable • Normalise l’API d’Erlang/OTP • Introduit du « typage canard », à l’aide de protocoles • Expose d’avantage le dynamisme de ERTS • Créé par José Valim (un committer éminent de Rails)