Bonjour Guillaume,

Tu as écrit:

>Cela fait donc beaucoup de moyens de communiquer, mais je ne vois pas
>quel moyen est le plus approprié pour écrire telle ou telle application.

C'est parce que deux choses interviennent dans le choix de tel ou tel moyen. Le 
plus important est le fait que le programmeur choisira toujours le moyen avec 
lequel il se sentira le plus à l'aise. De ce fait, vu qu'on peut se sentir plus 
à l'aise avec tel moyen plutôt que tel autre, on aura moins de souci à 
déboguer. Ensuite, mais seulement ensuite, vient le fait qu'on trouvera tel ou 
tel moyen plus efficace que tel ou tel autre.

>Par exemple, pouvez vous me dire quels types d'applications utilisent :
>- les tubes

Comme le disait Tarik, ce sont principalement des systèmes de type 
producteur(s)/consommateur(s). Le tube étant monodirectionnel, à l'entrée, tu 
mets un ou plusieurs producteurs, et à la sortie, tu mets un ou plusieurs 
consommateurs.

Dans le cas où chaque producteur écrit des données par paquets et où 
l'intégrité de chaque paquet doit être respectée, tu mettras un mutex à 
l'entrée du tube, de sorte que chaque producteur y aille à son tour. Le 
problème du tube est qu'il est généralement de petite taille et que cette 
taille n'est pas ajustable. Il se peut donc que ledit tube ne permette pas de 
tenir la cadence de producteurs/consommateurs trop rapides pour lui. Exemple 
typique: l'entrée du tube est alimenté par un driver qui, comme c'est un 
driver, ne peut se permettre d'avoir des tampons trop grands et qui, de ce 
fait, doit pouvoir fournir ses données très rapidement. Si à la sortie du tube, 
tu as un consommateur qui consomme à une vitesse irrégulière, il se peut fort 
bien que le tube s'engorge et que tu perdes des paquets à la sortie.

>- les sockets locaux (parce que les sockets internet je connais)

C'est un moyen plus simple que de mettre deux tubes: l'un dans un sens et 
l'autre dans l'autre parce qu'un socket, c'est bidirectionnel. Cependant, comme 
le dit justement Tarik, il faut un processus qui commande, (le serveur), et 
ceux qui suivent, (les clients).

Avantage du socket local par rapport au tube: La taille de ses tampons 
d'émission et réception est ajustable. Pour de la transmission vidéo, j'ai même 
vu des sockets, (locaux ou même ethernet) avec des tampons d'émission/réception 
de 2 mo.

>- les segments de mémoire partagée et les sémaphores

C'est dans le cas où tu as un assemblage de processus qui sont tellement 
interdépendants les uns des autres que le classique schéma de 
producteur/consommateur ne peut s'appliquer. Je n'ai pas d'exemple en tête mais 
d'une manière générale, quand la production d'une grosse quantité de données 
peut servir à un autre processus qui lui-même va produire autre chose dont on 
aura besoin plus tard. Du coup, on utilisera des sémaphores ou de simples mutex 
pour protéger l'espace de mémoire.

>- les messages

Ils peuvent être pratiques pour gérer des événements en provenance de 
l'utilisateur mais ils sont généralement assez lourds. Ce moyen de 
communication fait penser à la manière dont des applications win32 communiquent 
avec leur utilisateur: chaque bouton appuyé, déplacement de souris, pression ou 
relâchement d'une touche du clavier, correspond à un message qui est envoyé à 
l'application.

Mais j'avoue ne pas avoir encore utilisé ce mécanisme sous linux. C'est 
seulement sous win32 que je m'en suis servi. Et encore, je l'ai fait uniquement 
parce que dès que tu te connectes à une interface utilisateur, tu sais qu'elle 
fonctionnera comme ça donc, tu t'y calques.

Mais globalement, bien faire attention à l'approche qui consisterait à être 
trop catégorique en se disant "J'ai tel type d'application à écrire donc 
j'utiliserai tel moyen plutôt que tel autre". Parce qu'en réalité, dans 
beaucoup de cas, (pas tous quand même), les moyens de communication sont 
interchangeables. Ne pas non plus confondre les moyens de communications: 
tubes, sockets, mémoire partagée, messages, avec les moyens de synchronisation: 
signaux, mutexes, sémaphores, ...

Bonne journée. @+ ChD
_______________________________________________
Liste de diffusion CarrefourBLinuX
    [email protected]
    http://lists.freearchive.org/mailman/listinfo/carrefourblinux
Pour s'inscrire par courriel :
    'mailto:[email protected]?subject=subscribe'
Pour se retirer de la liste par courriel :
    'mailto:[email protected]?subject=unsubscribe'

Archives : http://lists.freearchive.org/pipermail//carrefourblinux
Anciennes archives (Yahoogroupes) :
    http://fr.groups.yahoo.com/group/carrefourblinux/messages
Rechercher : http://lists.freearchive.org/cgi-bin/search.cgi

Signets : http://fr.groups.yahoo.com/group/carrefourblinux/links/
Fiches EDU : http://blinuxwiki.pbwiki.com/FichesEdu

Répondre à