<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Benjamin Maes, auteur/autrice sur EKITE</title>
	<atom:link href="https://ekite.info/author/maesbenekite/feed/" rel="self" type="application/rss+xml" />
	<link>https://ekite.info</link>
	<description>Vos défis, notre passion</description>
	<lastBuildDate>Mon, 22 Jul 2024 14:05:33 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1.3</generator>

<image>
	<url>https://ekite.info/wp-content/uploads/2023/06/cropped-favicon2-150x150.png</url>
	<title>Benjamin Maes, auteur/autrice sur EKITE</title>
	<link>https://ekite.info</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Le Pouvoir de l&#8217;IA dans le monde de la Tech : entre fiction et réalité</title>
		<link>https://ekite.info/2024/04/30/le-pouvoir-de-lia-dans-le-monde-de-la-tech-entre-fiction-et-realite/</link>
		
		<dc:creator><![CDATA[Benjamin Maes]]></dc:creator>
		<pubDate>Tue, 30 Apr 2024 12:55:29 +0000</pubDate>
				<category><![CDATA[Agilité]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[UX]]></category>
		<guid isPermaLink="false">https://ekite.info/?p=2820</guid>

					<description><![CDATA[<p>Dans le monde de la technologie, l&#8217;intelligence artificielle (IA) est devenue bien plus qu&#8217;une simple innovation. Elle est devenue une pierre angulaire de nombreuses industries, bouleversant nos vies, de telle sorte que mêmes les auteurs de science-fiction n’auraient pu l’imaginer. Dans cet article, nous plongeons dans l&#8217;univers fascinant de l&#8217;IA dans le domaine de la [&#8230;]</p>
<p>L’article <a href="https://ekite.info/2024/04/30/le-pouvoir-de-lia-dans-le-monde-de-la-tech-entre-fiction-et-realite/">Le Pouvoir de l&rsquo;IA dans le monde de la Tech : entre fiction et réalité</a> est apparu en premier sur <a href="https://ekite.info">EKITE</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Dans le monde de la technologie, l&rsquo;intelligence artificielle (IA) est devenue bien plus qu&rsquo;une simple innovation. Elle est devenue une pierre angulaire de nombreuses industries, bouleversant nos vies, de telle sorte que mêmes les auteurs de science-fiction n’auraient pu l’imaginer. Dans cet article, nous plongeons dans l&rsquo;univers fascinant de l&rsquo;IA dans le domaine de la tech, explorant son utilisation, ses impacts et les risques associés, tout en faisant des parallèles captivants avec la science-fiction.</p>
<p><span id="more-2820"></span></p>
<h2>Mais l&rsquo;IA c&rsquo;est quoi exactement ?</h2>
<p>L’IA est un domaine dans lequel les scientifiques cherchent à créer des machines capables de simuler l’intelligence humaine. Contrairement à un simple programme informatique qui suit des instructions prédéfinies, une IA est capable d&rsquo;apprendre à partir de données, de reconnaitre des schémas et des tendances, et de prendre des décisions autonomes en fonction de ces informations. Cette capacité rappelle les androïdes conscients que l&rsquo;on retrouve dans des œuvres de science-fiction comme <em><strong>Blade Runner</strong></em>, <strong><em>Terminator</em></strong> ou <strong><em>Matrix</em></strong>, ou encore plus récemment dans des jeux vidéo comme <em><strong>Mass Effect</strong></em> ou <strong><em>Cyberpunk 2077</em></strong>. Dans ces œuvres, les IA ne sont pas simplement des outils, mais sont (ou deviennent) des entités dotées d’une conscience propre, remettant ainsi en question les frontières traditionnelles entre l&rsquo;humain et la machine.</p>
<p>&nbsp;</p>
<p style="text-align: center;"><img decoding="async" class="wp-image-2873 aligncenter" src="https://ekite.info/wp-content/uploads/2024/04/IA_1-300x42.jpg" alt="" width="1300" height="182" srcset="https://ekite.info/wp-content/uploads/2024/04/IA_1-300x42.jpg 1300w, https://ekite.info/wp-content/uploads/2024/04/IA_1-1280x178.jpg 1280w, https://ekite.info/wp-content/uploads/2024/04/IA_1-980x137.jpg 980w, https://ekite.info/wp-content/uploads/2024/04/IA_1-480x67.jpg 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) and (max-width: 1280px) 1280px, (min-width: 1281px) 1300px, 100vw" /></p>
<h2>Comment ça marche ?</h2>
<p>Le fonctionnement de l&rsquo;IA repose sur un ensemble d&rsquo;algorithmes et de modèles mathématiques. Ces algorithmes sont élaborés pour traiter de vastes ensembles de données, leur permettant d&rsquo;analyser des schémas, des tendances, des corrélations et ainsi établir des statistiques sur la réponse la plus probable d’être la meilleure à une situation donnée. En s&rsquo;appuyant sur ces informations, l&rsquo;IA est en mesure d&rsquo;apprendre et de s&rsquo;adapter à de nouvelles situations, améliorant ainsi sa capacité à effectuer des tâches spécifiques de manière autonome. En somme, l&rsquo;IA se perfectionne progressivement à mesure qu&rsquo;elle interagit avec son environnement, lui permettant ainsi de s&rsquo;améliorer continuellement dans l&rsquo;accomplissement de ses tâches.</p>
<p><img loading="lazy" decoding="async" class=" wp-image-2875 aligncenter" src="https://ekite.info/wp-content/uploads/2024/04/what-is-artificial-intelligence-infographic.width-880-300x150.webp" alt="" width="700" height="350" srcset="https://ekite.info/wp-content/uploads/2024/04/what-is-artificial-intelligence-infographic.width-880-300x150.webp 700w, https://ekite.info/wp-content/uploads/2024/04/what-is-artificial-intelligence-infographic.width-880-480x240.webp 480w" sizes="auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 700px, 100vw" /></p>
<p>&nbsp;</p>
<h2>Dans les métiers de la tech ça donne quoi ?</h2>
<p>Voici quelques exemples prenant en compte les métiers présents chez EKITE.</p>
<h3>Développeur :</h3>
<p>L&rsquo;utilisation de l&rsquo;IA dans le développement logiciel présente l&rsquo;avantage majeur d&rsquo;automatiser des tâches répétitives et fastidieuses, comme les tests unitaires par exemple, permettant ainsi aux développeurs de se concentrer sur des tâches plus créatives et à plus forte valeur ajoutée. Cependant, cela soulève également des préoccupations quant à la dépendance excessive à l&rsquo;égard de l&rsquo;IA, avec le risque que les développeurs perdent leur expertise technique et leur capacité à résoudre des problèmes de manière autonome. Un parallèle peut être fait avec le film <strong><em>Matrix</em></strong>, dans lequel l&rsquo;humanité devient dépendante des machines, perdant ainsi son autonomie et sa capacité à contrôler son propre destin.</p>
<h3>DevOps :</h3>
<p>L&rsquo;IA offre par exemple aux DevOps la possibilité d&rsquo;optimiser l’infrastructure d’un système en identifiant les inefficacités et en automatisant les processus. Cependant, l&rsquo;automatisation excessive peut entrainer une perte de contrôle et de visibilité  sur ces mêmes systèmes, avec le risque de défaillances catastrophiques en cas de mauvaise interprétation des données par l&rsquo;IA. Comme par exemple avec Skynet dans <strong><em>Terminator</em></strong>, qui prend le contrôle des systèmes militaires avec des conséquences désastreuses pour l&rsquo;humanité.</p>
<h3>UI/UX:</h3>
<p>L&rsquo;IA permet aux spécialistes de l&rsquo;UI/UX de personnaliser les interfaces utilisateurs pour répondre aux besoins individuels des utilisateurs, améliorant ainsi l&rsquo;expérience utilisateur globale. Cependant, cela soulève des préoccupations en matière de protection de la vie privée et de manipulation des données des utilisateurs, avec le risque que les algorithmes d&rsquo;IA soient utilisés pour influencer ou contrôler le comportement des utilisateurs. Un parallèle peut être fait avec le système de surveillance omniprésent dans le film <em><strong>Minority Report</strong></em>, qui utilise des technologies avancées pour prédire et manipuler la conduite des individus.</p>
<h3>PO (<em>Product Owner</em>) :</h3>
<p>L&rsquo;IA offre aux <em><strong>Product Owners</strong></em> la possibilité d&rsquo;analyser les données des utilisateurs et les tendances du marché pour guider le développement de produits plus innovants et adaptés aux besoins du marché. Cependant, cela soulève des préoccupations concernant la fiabilité des prédictions basées sur les données et le risque d&rsquo;interprétation erronée des résultats par les algorithmes d&rsquo;IA. Comme par exemple avec l&rsquo;ordinateur HAL 9000 dans <strong><em>2001 : l&rsquo;Odyssée de l&rsquo;espace</em></strong>, qui assiste l&rsquo;équipage dans la prise de décisions mais finit par mettre en danger la vie de ses membres en raison d&rsquo;une mauvaise interprétation des données.</p>
<h5>Chaque métier de la tech se trouve ainsi confronté à un dilemme entre les avantages potentiels de l&rsquo;IA concernant son efficacité et de l&rsquo;innovation qu&rsquo;elle apporte, et les risques inhérents à une dépendance excessive à la technologie et à une perte de contrôle sur les systèmes.</h5>
<h2><img loading="lazy" decoding="async" class=" wp-image-2882 aligncenter" src="https://ekite.info/wp-content/uploads/2024/04/ia2-300x45.jpg" alt="" width="1064" height="161" srcset="https://ekite.info/wp-content/uploads/2024/04/ia2-980x148.jpg 980w, https://ekite.info/wp-content/uploads/2024/04/ia2-480x73.jpg 480w" sizes="auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1064px, 100vw" /></h2>
<h2></h2>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h2>Et qu’est-ce qui nous attend ?</h2>
<p>Le futur de l&rsquo;IA suscite à la fois fascination et inquiétude, par les visions contrastées de la science-fiction mais aussi par l’évolution actuelle notamment avec les IA génératives d’images, d&rsquo;audio et/ou de films qui paraissent toujours plus réalistes. Certains imaginent un monde où l&rsquo;IA devient notre alliée la plus fidèle, améliorant tous les aspects de notre vie, de la santé à l&rsquo;éducation en passant par le travail. D&rsquo;autres redoutent une dystopie où les machines deviennent incontrôlables, mettant en péril notre existence même. Dans tous les cas, une chose est certaine: l&rsquo;IA continuera à évoluer et à façonner notre avenir de manière profonde et inattendue, nous invitant à réfléchir sur ce que signifie réellement être humain dans un monde de plus en plus dominé par la technologie.</p>
<p><img loading="lazy" decoding="async" class=" wp-image-2886 aligncenter" src="https://ekite.info/wp-content/uploads/2024/04/ai3-300x169.jpg" alt="" width="472" height="266" /></p>
<p><strong><em>Disclamer : oui bien entendu que cet article a été en partie rédigé en utilisant une IA générative, j’ai simplement retouché les passages qui ne me convenaient pas assez. Peut-être que vous l’aviez remarqué ou peut-être pas. Je suis une personne plus douée pour écrire du code que du français il me fallait un petit coup de main. 😀 </em></strong></p>
<blockquote>
<p style="text-align: center;">Comme l’a dit un jour un grand homme: « Un grand pouvoir implique une grande responsabilité. »</p>
</blockquote>
<h6 style="text-align: center;"><img decoding="async" class="aligncenter" src="https://i.kym-cdn.com/photos/images/original/000/933/851/c8e.jpg" alt="60s Spider-Man With Great Power | With Great Power Comes Great Responsibility | Know Your Meme" /></h6>
<h6 style="text-align: center;"><em><strong>Le mot de la fin: l’IA c’est bien, correctement utilisée c’est mieux. 🙂</strong></em></h6>
<p>L’article <a href="https://ekite.info/2024/04/30/le-pouvoir-de-lia-dans-le-monde-de-la-tech-entre-fiction-et-realite/">Le Pouvoir de l&rsquo;IA dans le monde de la Tech : entre fiction et réalité</a> est apparu en premier sur <a href="https://ekite.info">EKITE</a>.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2820</post-id>	</item>
		<item>
		<title>Java Loom : Virtual Threads et Structured Concurrency</title>
		<link>https://ekite.info/2023/07/20/java-loom-virtual-threads-et-structured-concurrency/</link>
		
		<dc:creator><![CDATA[Maxime Montagne]]></dc:creator>
		<pubDate>Thu, 20 Jul 2023 13:51:11 +0000</pubDate>
				<category><![CDATA[Tech]]></category>
		<guid isPermaLink="false">https://ekite.info/?p=2319</guid>

					<description><![CDATA[<p>Les nouveautés de Java 19 et 20  La version 19 de Java datant de septembre 2021 apporte de nouvelles fonctionnalités telles qu’une mise à jour du pattern matching pour instanceof, introduit en feature preview de Java 14. Mais également des améliorations pour la gestion de la mémoire, ainsi que des améliorations pour la sécurité.   [&#8230;]</p>
<p>L’article <a href="https://ekite.info/2023/07/20/java-loom-virtual-threads-et-structured-concurrency/">Java Loom : Virtual Threads et Structured Concurrency</a> est apparu en premier sur <a href="https://ekite.info">EKITE</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2 aria-level="1"><span data-contrast="none">Les nouveautés de Java 19 et 20</span><span data-ccp-props="{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;201341983&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:0,&quot;335559740&quot;:259}"> </span></h2>
<p aria-level="1"><span data-contrast="auto">La version 19 de Java datant de septembre 2021 apporte de nouvelles fonctionnalités telles qu’une mise à jour du pattern matching pour instanceof, introduit en feature preview de Java 14. Mais également des améliorations pour la gestion de la mémoire, ainsi que des améliorations pour la sécurité. </span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}"> </span></p>
<p><span data-contrast="auto">De plus cette version inclut quelques «?petites?» feature previews comme le projet Loom et ses 99 468 lignes de code réparties dans 1133 fichiers modifiés. Il a pour but de remplacer les threads actuels présents depuis la création de Java grâce à un innovant système de virtual threads.</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}"> </span></p>
<p><img loading="lazy" decoding="async" class="alignnone wp-image-3279 size-medium" src="https://ekite.info/wp-content/uploads/2024/07/FireShot-Capture-080-David-Delabassee-sur-X-_-_Implementation-of-Virtual-Threads-Preview_-x.com_-300x93.png" alt="" width="300" height="93" /></p>
<p class="p1">La dernière version de Java, sortie en mars 2023, est Java 20. Cette version apporte de nouvelles fonctionnalités en <i>feature preview</i> comme les <i>scoped values</i>, les <i>record patterns</i>, le <i>pattern matching for switch</i>, les <i>foreign functions</i> et la <i>memory</i> API, mais également des améliorations liées au projet Loom comme les <b><i>virtual threads</i> et les <i>structured concurrency</i>.</b></p>
<p class="p1">Nous allons, dans cet article, et <i>via</i> des exemples concrets, vous parler de la combinaison <b><i>virtual threads</i></b> et <b><i>structured concurrency</i></b>, qui composent à eux deux le projet Loom introduit dans Java 19.</p>
<h2 aria-level="1"><span data-contrast="none">Le projet Loom : qu’est-ce que c’est ?</span><span data-ccp-props="{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;201341983&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:0,&quot;335559740&quot;:259}"> </span></h2>
<p class="p1">Avant d’entrer dans le détail voici un petit rappel des différentes évolutions liées à la programmation concurrente ou asynchrone en Java :</p>
<p><span data-contrast="auto">Java 1.0 &#8211; 1995 : Thread, Runnable, synchronized() </span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559731&quot;:705,&quot;335559739&quot;:160,&quot;335559740&quot;:259}"> </span></p>
<p><span data-contrast="auto">Java 5 &#8211; 2004 : ExecutorService, Callable, locks </span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559731&quot;:705,&quot;335559739&quot;:160,&quot;335559740&quot;:259}"> </span></p>
<p><span data-contrast="auto">Java 8 &#8211; 2014 : Fork / Join, parallel streams, CompletableFuture </span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559731&quot;:705,&quot;335559739&quot;:160,&quot;335559740&quot;:259}"> </span></p>
<p><span data-contrast="auto">La programmation concurrente est utilisée principalement dans deux cas de figure : </span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}"> </span></p>
<ul>
<li data-leveltext="-" data-font="&quot;Calibri&quot;,sans-serif" data-listid="1" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;\&quot;Calibri\&quot;,sans-serif&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;-&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" aria-setsize="-1" data-aria-posinset="1" data-aria-level="1"><span data-contrast="auto">l’exécution de traitements en parallèle pour utiliser tous les cœurs du CPU ;</span></li>
<li data-leveltext="-" data-font="&quot;Calibri&quot;,sans-serif" data-listid="1" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;\&quot;Calibri\&quot;,sans-serif&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;-&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" aria-setsize="-1" data-aria-posinset="2" data-aria-level="1"><span data-contrast="auto">l’augmentation du débit de traitement d’une application pour traiter plus de requêtes.</span></li>
</ul>
<p><span data-contrast="none">Cependant, l’un des plus gros problèmes existant depuis leur création est?qu’une fois une tâche lancée par un thread, elle ne peut plus être arrêtée correctement et il faut attendre soit?sa complétion, soit une interruption via une exception.</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}"> </span></p>
<p><span data-contrast="none">Par ailleurs, un thread prend 1ms pour se lancer.</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}"> </span></p>
<p><span data-contrast="none">Par exemple :</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}"> </span></p>
<ul>
<li class="li1">si on en lance 1 000, cela va prendre 1 seconde ;</li>
<li class="li1">si on en lance 1 000 000, cela va prendre 1 000 secondes (soit un peu plus d&rsquo;un quart d’heure).</li>
</ul>
<p class="p1">Un <i>thread</i> passe donc 99,99 % du temps à attendre et il faudrait 1 million de <i>threads</i> en simultané pour occuper 100 % du CPU. Malheureusement un <i>thread</i> coûte cher en ressources.</p>
<p class="p1">En effet, la taille d’un <i>thread</i> Java est fixe. Elle est définie par défaut à 1 024 KB sur une JVM 64-bit et peut être définie grâce à l’option « -Xss ». De ce fait, la JVM aura un nombre maximum de <i>threads</i> allouable qui dépendra donc de la configuration de la machine.</p>
<p class="p1">Par exemple sur un PC Windows avec 32 Go de RAM avec le JDK 19 on peut voir ci-dessous que nous avons 16 825 864 KB « Reserved* 1 » et 728 584 KB en « Commited** 2 » pour les <i>threads</i> de la JVM.</p>
<p class="p1">Nous pourrons donc allouer jusqu’à 16 431 <i>threads</i> simultanément en sachant qu’à peu près 712 sont déjà alloués et utilisés par la JVM.</p>
<p><img loading="lazy" decoding="async" class="wp-image-2327 aligncenter" src="https://ekite.info/wp-content/uploads/2024/01/2.png" alt="" width="702" height="559" /></p>
<p class="p1"><i>Reserved* : la taille garantie pour être accessible par l’OS hôte (mais pas encore allouée ni utilisable par la JVM).</i></p>
<p class="p1"><i>Commited** : taille déjà prise, accessible et allouée par la JVM</i>.</p>
<p class="p1">Pour pallier ce problème, la programmation asynchrone est arrivée et permet de lancer plusieurs traitements sur un même <i>thread</i>.</p>
<p class="p1">Dans l’exemple ci-dessous, nous utilisons des <i>CompletableFuture</i> pour simuler les opérations asynchrones. La méthode <i>processOrders</i> crée une liste de <em>Future</em> pour effectuer les différentes étapes de traitement des commandes, puis attend leur complétion avant de collecter les résultats finaux.</p>
<p><img loading="lazy" decoding="async" class="wp-image-2328 aligncenter" src="https://ekite.info/wp-content/uploads/2024/01/3.png" alt="" width="708" height="1113" /></p>
<p class="p1">Il existe également une librairie « Project Reactor » venant de la communauté de Spring et qui profite de l’avantage d’être basée sur les APIs Java (CompletableFuture, Stream, Duration, ExecutorService, Flow, etc.) mais utilise aussi le <i>design pattern Observable</i>. Cette librairie est notamment utilisée par Spring WebFlux et permet le développement d’API Rest Reactive.</p>
<p class="p1">Cependant cette manière d’utiliser les <i>threads</i> est plutôt difficile à écrire, à lire, à tester et à « debugger » et donc compliquée à maintenir.</p>
<p class="p1">C’est là qu’intervient le projet Loom en proposant de revenir à une programmation synchrone, plus simple, MAIS d’augmenter le nombre possible de <i>threads</i> en simultané <i>via</i> l’utilisation de «?Virtual Threads?» qui consomment environ 1 000 fois moins de ressources qu’un <i>thread</i> classique. Il est alors possible de créer jusqu’à 1 million de <i>virtual threads</i> sur une machine. Ces <i>virtual threads</i> sont gérés directement par la JVM, et donc l’allocation de ces <i>thread</i>s ne nécessite pas d’appels au système d’exploitation de la machine.</p>
<p class="p1">Grâce à Loom on peut s’affranchir des <i>pools</i> de <i>thread</i>, les <i>virtual threads</i> sont si légers (environ 1 000 fois plus qu’un <i>thread</i> classique, de l’ordre du kilo-octet), que cela nous permet de les laisser mourir sans intervention et d’en utiliser d’autres si besoin.</p>
<p><img loading="lazy" decoding="async" class="wp-image-2330 aligncenter" src="https://ekite.info/wp-content/uploads/2024/01/4.png" alt="" width="601" height="232" /></p>
<h2 aria-level="1"><span data-contrast="none">Et niveau code ça donne quoi ?</span><span data-ccp-props="{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;201341983&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:0,&quot;335559740&quot;:259}"> </span></h2>
<p class="p1">Concernant le développement dans votre code Java, la <i>class</i> <b>VirtualThread</b> n’est pas visible. On utilisera donc toujours la <i>class</i> <b>Thread</b>. Mais on utilisera une implémentation qui va créer le code :</p>
<p><img loading="lazy" decoding="async" class="wp-image-2331 aligncenter" src="https://ekite.info/wp-content/uploads/2024/01/5.png" alt="" width="505" height="105" /></p>
<p class="p1">Si vous êtes adepte des <b>ExecutorService</b>, vous pouvez les utiliser directement et simplement en utilisant la méthode suivante :</p>
<p><span data-ccp-props="{&quot;134233118&quot;:false,&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:257}"><img loading="lazy" decoding="async" class="wp-image-2333 aligncenter" src="https://ekite.info/wp-content/uploads/2024/01/6.png" alt="" width="667" height="89" /></span></p>
<p class="p1">De ce fait si vous utilisiez déjà des <i>threads</i> et/ou des <b>ExecutorServices</b> dans certaines de vos applications, le passage vers les <i>virtual threads</i> pourrait s’effectuer avec très peu d’adaptations.</p>
<p class="p1">Attention cependant, les ExecutorServices ne tuent pas les <i>threads</i> qui n’ont pas terminé leur exécution. C’est là où on peut utiliser directement les <i>try with resources</i> en déclarant notre <i>scope</i> avec ES.ShutdownOnSuccess. Une fois l’exécution du <i>scope</i> effectuée, l’ensemble des <i>virtual threads</i> restant sont stoppés.</p>
<p><span data-contrast="auto"> </span><span data-ccp-props="{&quot;134233118&quot;:false,&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:257}"><img loading="lazy" decoding="async" class="wp-image-2334 aligncenter" src="https://ekite.info/wp-content/uploads/2024/01/7.png" alt="" width="786" height="377" /></span></p>
<p class="p1">Étant donné que le projet Loom est encore en « preview » il faudra au préalable activer cette <i>feature</i> de Java grâce à l’option : <b><i>–-enable-preview</i></b></p>
<p><span data-ccp-props="{&quot;134233118&quot;:false,&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:257}"><img loading="lazy" decoding="async" class="wp-image-2335 aligncenter" src="https://ekite.info/wp-content/uploads/2024/01/8.png" alt="" width="506" height="318" /></span></p>
<p class="p1">Il est possible avec quelques milliers de <i>threads</i> de pouvoir les analyser <i>via</i> son IDE ou bien <i>via</i> des <i>dumps</i> de <i>thread via</i> JMC (<a href="https://docs.oracle.com/javacomponents/jmc-5-5/jmc-user-guide/intro.htm#JMCCI109"><span class="s1"><b>Java Mission Control</b></span></a>) par exemple.</p>
<p class="p1">En revanche avec le million de <i>threads</i> permis par les <i>virtual threads</i> cela devient mission impossible. C’est pour cela qu’a été introduite dans Java 20 la notion de <b><i>structured concurency</i>, ou <i>pattern</i> de programmation concurrente structurée.</b></p>
<h2 class="p1">Mais comment fonctionne la programmation concurrente structurée ?</h2>
<p class="p1">L’objectif est de regrouper un ensemble de <i>threads</i>, on parle ici de « scope » qui est un <i>pool</i> de <i>thread</i> structuré en arbre. Lorsqu’un <i>thread</i> fils génère de nouveaux ensembles de <i>threads</i>, ces ensembles deviennent des sous-groupes rattachés au <i>pool</i> principal.</p>
<p class="p1">La structuration de chaque <i>scope</i> sera donc le reflet du <i>scope</i> métier que vous voulez implémenter.</p>
<p class="p1">Pour pouvoir utiliser les <b><i>structured concurency</i></b><i> </i>introduits par Java 20 il faudra en plus de l’option &#8212;<b><i>enable-preview</i></b> ajouter l’option &#8212;<b><i>add-modules=jdk.incubator.concurrent</i></b></p>
<p class="p1">Dans notre exemple nous avons voulu représenter un service de réservation de salle de sport. Ce service se chargera d’appeler différentes salles de sport pour connaitre leurs programmes, et choisira celle qui correspondra à nos critères de recherche. Par exemple la salle dont la date de la prochaine session est la plus proche.</p>
<p><span data-ccp-props="{&quot;134233118&quot;:false,&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:257}"><img loading="lazy" decoding="async" class="wp-image-2336 aligncenter" src="https://ekite.info/wp-content/uploads/2024/01/9.png" alt="" width="649" height="359" /></span></p>
<p class="p1">Pour ajouter du traitement métier au sein d’un <i>scope</i>, on peut le créer directement soi-même en implémentant la méthode handleComplete de l’ExecutorService au sein de notre <i>class</i> fille.</p>
<p><span data-ccp-props="{&quot;134233118&quot;:false,&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:257}"><img loading="lazy" decoding="async" class="wp-image-2337 aligncenter" src="https://ekite.info/wp-content/uploads/2024/01/10.png" alt="" width="693" height="815" /></span></p>
<p class="p1">Liez ce code avec des <i>fork/join</i> au sein de chaque <i>scope</i> et votre code sera synchrone, bien plus lisible, testable et maintenable qu’avec un code de type asynchrone.</p>
<p aria-level="1"><b><i><span data-contrast="auto"><img loading="lazy" decoding="async" class="wp-image-2339 aligncenter" src="https://ekite.info/wp-content/uploads/2024/01/11.png" alt="" width="657" height="690" /> </span></i></b><span data-ccp-props="{&quot;134233118&quot;:false,&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:257}"> </span></p>
<h2 aria-level="1"><span data-contrast="none">Conclusion :</span><span data-ccp-props="{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;201341983&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:0,&quot;335559740&quot;:259}"> </span></h2>
<p class="p1">À travers cet article, nous avons pu découvrir et comprendre le fonctionnement des <i>virtual threads</i> et ce qu’ils apporteront à la programmation asynchrone.</p>
<p class="p1">Lors de la rédaction de cet article, Java 21 future LTS, qui sortira en septembre 2023, a annoncé le changement de statut des <i>virtual threads</i>, passant de « <b><i>Proposed to Target »</i></b> à<b> « <i>Targeted »</i>. </b>Ils seront donc présents comme <i>feature</i> à part entière à côté des autres <i>features</i> de Java 21 : <i>pattern matching for switch, record patterns, sequenced collections</i>, etc.</p>
<p><span data-contrast="none">Le code utilisé pour nos tests est présent sur notre github : </span><a href="https://github.com/ekit3/loom-jdk20"><span data-contrast="none">https://github.com/ekit3/Loom-jdk20</span></a><span data-contrast="none"> </span><span data-ccp-props="{&quot;134233118&quot;:false,&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:257}"> </span></p>
<p>&nbsp;</p>
<p aria-level="1"><span data-contrast="none">Sources :</span><span data-ccp-props="{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;201341983&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:0,&quot;335559740&quot;:259}"> </span></p>
<p><a href="https://www.proxiad.com/loom-le-futur-de-java-programmation-asynchrone/"><span data-contrast="none">https://www.proxiad.com/Loom-le-futur-de-Java-programmation-asynchrone/</span></a><span data-ccp-props="{&quot;134233118&quot;:false,&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:257}"> </span></p>
<p><a href="https://univalence.io/blog/articles/project-loom-les-continuations-et-les-thread-virtuels/"><span data-contrast="none">https://univalence.io/blog/articles/project-Loom-les-continuations-et-les-thread-virtuels/</span></a><span data-ccp-props="{&quot;134233118&quot;:false,&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:257}"> </span></p>
<p><a href="https://www.invivoo.com/projet-loom-thread-virtuel/"><span data-contrast="none">https://www.invivoo.com/projet-Loom-thread-virtuel/</span></a><span data-ccp-props="{&quot;134233118&quot;:false,&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:257}"> </span></p>
<p><a href="https://dzone.com/articles/how-much-memory-does-a-java-thread-take"><span data-contrast="none">https://dzone.com/articles/how-much-memory-does-a-Java-thread-take</span></a><span data-ccp-props="{&quot;134233118&quot;:false,&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:257}"> </span></p>
<p>L’article <a href="https://ekite.info/2023/07/20/java-loom-virtual-threads-et-structured-concurrency/">Java Loom : Virtual Threads et Structured Concurrency</a> est apparu en premier sur <a href="https://ekite.info">EKITE</a>.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2319</post-id>	</item>
	</channel>
</rss>
