Nouvelles Chroniques d'Amethyste

Penser au Sens, pas au Verbe


Poster un commentaire

Les nouveaux chemins vers l’asynchronisme – V

Continuons la série:

  1. https://amethyste16.wordpress.com/2014/10/02/les-nouveaux-chemins-vers-lasynchronisme-i/
  2. https://amethyste16.wordpress.com/2014/10/03/les-nouveaux-chemins-vers-lasynchronisme-ii/
  3. https://amethyste16.wordpress.com/2015/03/10/les-nouveaux-chemins-vers-lasynchronisme-iii/
  4. https://amethyste16.wordpress.com/2015/03/15/les-nouveaux-chemins-vers-lasynchronisme-iv/

Je ne vais pas encore aborder la question de async/await, mais parler de petits points techniques importants à connaître:

  • TaskStatus
  • Expériences mystérieuses avec Task.Run
  • TaskCompletionSource<TResult>

Lire la suite


Poster un commentaire

Les nouveaux chemins vers l’asynchronisme – IV

La suite (mais pas la fin) de notre série :

  1. https://amethyste16.wordpress.com/2014/10/02/les-nouveaux-chemins-vers-lasynchronisme-i/
  2. https://amethyste16.wordpress.com/2014/10/03/les-nouveaux-chemins-vers-lasynchronisme-ii/
  3. https://amethyste16.wordpress.com/2015/03/10/les-nouveaux-chemins-vers-lasynchronisme-iii/

 

Vous remarquerez que dans les blogs, sur des sujets un peu techniques comme les Tasks on lit souvent des trucs du style: « un de mes collègues n’arrivait pas à… », « on m’a un jour demandé si…. » et hop je suis arrivé tel Zorro et j’ai sauvé la planète.

Ok, pourquoi pas. Personnellement je n’ai pas honte d’avouer qu’un jour ne savais pas faire, que j’ai parfois eu un peu de mal à comprendre et que j’ai fais toutes les erreurs possibles, même les plus stupides. Bref, le collègue et bien c’était moi!

C’est pour ça que je vais essayer de bien souligner les trucs que j’ai testé et qui ne marchent pas. Disons le, les Tasks ainsi que async/await, c’est plein de subtilités et ne marche pas toujours du premier coup.

Lorsque j’ai commencé à travailler avec les Task il y a quelque temps déjà, puis plus tard avec async/await, le problème récurrent que j’ai rencontré est de savoir intégrer ces outils dans du code de la vie réelle. Au début je n’y arrivais pas et mes méthodes asynchrones n’étaient rien de plus que des méthodes synchrones déguisées.

Alors abordons ensemble cette question pour ne pas faire les même erreurs que moi en écrivant notre première méthode asynchrone. Il serait par contre utile de lire (ou relire) au moins l’article précédent.

Lire la suite


Poster un commentaire

Les nouveaux chemins vers l’asynchronisme – III

Après le tour d’horizon effectué lors des deux articles qui précèdent:

  1. https://amethyste16.wordpress.com/2014/10/02/les-nouveaux-chemins-vers-lasynchronisme-i/
  2. https://amethyste16.wordpress.com/2014/10/03/les-nouveaux-chemins-vers-lasynchronisme-ii/

Nous entrons dans le vif du sujet. Microsoft propose une façon très différente de prendre en charge l’asynchronisme: les Task.

Une Task est simplement un bloc de code que l’on exécute de façon asynchrone. Il s’agit donc d’un concept beaucoup plus simple que le Thread. Sa mise en œuvre est elle-aussi beaucoup plus facile.

Contrairement aux threads, une Task n’effectue aucune action par elle-même. Elle est déposé dans une pile spéciale du ThreadPool et attend qu’un Thread lui soit affectée.

Si le pool de Thread présente un nombre limité d’instances (et il est peu conseillé de le modifier), on peut pousser autant de Task que l’on souhaite. Nous ne le verrons pas dans cet article, mais Microsoft a beaucoup travaillé sur les algorithmes d’affectation.

Lire la suite


Poster un commentaire

Les nouveaux chemins vers l’asynchronisme – II

Plusieurs pattern d’asynchronisme ont été définis au fil du temps. Les utiliser n’est bien sûr pas obligatoire, mais ils aident à homogénéiser le développement.

Le point important à noter est qu’ils sont indépendants de l’environnement de développement, c’est ce qui en font un pattern. Nous allons en analyser 3 d’usage courant dans le monde .Net:

  1. APM
    Asynchonous Programing Model
  2. EAP
    Event base Asynchronous Pattern
  3. TAP
    Task Asynchronous Pattern

.Net propose de nombreux outils pour gérer ces patterns: Thread, Task, Monitor. Les patterns en imposent aucun de particulier, c’est à nous de choisir.

Lire la suite


Poster un commentaire

Les nouveaux chemins vers l’asynchronisme – I

Je souhaite entamer une petite série sur la prise en charge de l’asynchronisme en C#. On va démarrer progressivement parce que le sujet est complexe, même si depuis l’apparition des Task, Microsoft a réussi un remarquable effort de simplification… et que dire du pattern async/await qui est carrément brillantissime.

 

Mais je pense déraisonnable d’essayer de comprendre async/await sans avoir une vision claire d’où on vient et pourquoi.

Nous allons commencer par définir le vocabulaire. Beaucoup de développeurs pense que l’asynchronisme a à voir avec les performances, ne savent pas définir la différence avec le multi-threading et je ne parle même pas du parallélisme!

On va donc essayer de démarrer sur des bases j’espère solides avant d’aborder les hauts rivages.

Eh, c’est pas mal cette formule. Je la recaserai dans un blog!

Lire la suite