|
| |
| TUTORIEL ALGO/METHODES |
 |
|
 |
| Programmation Orientée Objet : le multithreading |
| Exécuter plusieurs processus en même temps et de manière quasi transparente, voilà l'objectif du parallélisme, dont les applications sont omniprésentes dans l'informatique.
(08/03/2005) |
  |
Explication
La notion de parallélisme, couramment appelée multithreading,
est fondamentale car rendue
nécessaire par l'utilisation qui est aujourd'hui faite des ordinateurs.
Si la préhistoire de l'informatique n'autorisait le déroulement
que d'une seule tâche, le besoin d'en faire fonctionner deux,
puis très vite une multitude s'est fait sentir. Les systèmes d'exploitation
actuels, obligatoirement multitâches (ils permettent de
lancer plusieurs applications à la fois) sont le reflet de cette
évolution ; à son échelle, le multithreading est une forme de
multitâche.
La conception
même de nos ordinateurs (basés encore sur la machine de
Von Neumann, qui fonctionne de manière séquentielle) oblige
les programmes à jongler avec les tâches qu'ils lancent, et
les processeurs à trier par priorité les demandes qui leurs
sont envoyées. En résumé, les programmes d'aujourd'hui demandent
à un système séquentiel de fonctionner de manière apparemment
parallèle (ou pseudoparallèle), d'où le multithreading.
Multithreading sous-entend thread, ou processus. Si une
application est une tâche au sein d'un système multitâche, on
peut considérer le thread comme étant une minitâche. Plus prosaïquement,
là où l'application est considérée comme un processus lourd,
notre minitâche/thread est un processus léger. Ces processus
correspondent à une poignée d'instructions envoyées au processeur,
celui-ci se chargeant, par le biais d'un répartiteur, de leur
allouer quelques cycles de calcul. Le cycle terminé, le processeur
passe à la minitâche suivante et lui alloue les cycles suivants,
quitte à revenir ensuite sur la première minitâche. Le but,
en définitive, est de donner l'impression d'exécuter toutes
ces instructions en même temps.
Le processeur passe ainsi d'un processus à l'autre de manière
strictement séquentiel (la seule différence offerte par un processeur
plus récent est la vitesse à laquelle il exécute les tâches).
Chaque thread est ainsi géré de la même manière - sauf le cas
où un thread se voit assigné une priorité par le système d'exploitation),
où si le thread doit, durant son temps alloué, attendre le résultat
d'un appel de ressources (mémoire, disques, réseau...). Entre
chaque "passage de thread", le processeur mémorise les informations
nécessaires à la reprise de ce thread, afin de pouvoir le replacer
en contexte lors de cette reprise.
Toutes les activités critiques, qui nécessitent une attention
constante de la part du processeur ou qui prennent beaucoup
de temps, doivent être placées dans un thread. C'est ici que
le choix du développeur se pose : mettre ou non une classe "en
thread".
Implémentation
Chaque langage implémente le multithreading à sa manière, et
le résultat en mémoire peut varier d'une plate-forme à l'autre.
En Java et C#, les applications sont naturellement en parallèle,
car chaque application dispose d'un thread implicite, où tourne
le ramasse-miettes (garbage collector).
Java, pour commencer, dispose de deux techniques pour faire
appel au multithreading :
- étendre la classe visée en la faisant hériter de Thread
(plus précisément, java.lang.Thread)
- faire implémenter l'interface Runnable
à la classe.
Dans les deux cas, la classe devrait redéfinir une méthode run()
de Thread.
public class ClasseMaitresse {
public static void main(String[] args) {
LaClasse activite = new LaClasse ();
Thread t = new Thread(activite);
t.start();
}
}
public class LaClasse implements Runnable {
public void run() {
// les activités à exécuter
}
}
C#, de son côté, n'implémente pas le multithreading par héritage,
mais par composition : le développeur dispose de la classe System.Threading.Thread
et du délégué System.Threading.ThreadStart.
using System.Threading;
Thread unThread = new Thread(new ThreadStart(LaClasse.laMethode()
)); unThread .Start();
 |
Forum |
|
|
Réagissez
dans les forums
de JDN Développeurs
|
S'il ne faut pas abuser des threads (toutes les
classes n'ont pas besoin de faire appel à un thread à part),
leur connaissance et leur bon usage permet de toute façon de mieux
contrôler l'exécution de son programme, pour en définitive développer
une application qui fonctionne non seulement avec ses
propres activités, mais également en parallèle avec les autres.
|
|
|
 |