Le Wed, 5 Aug 2015 19:06:32 +0200
Post by Laurent BlochBonjour,
Voici une question qui me semble adaptée aux groupes auxquels
je l'adresse : comment traduire en français "concurrency, concurrent
programming" ? Quelle distinction avec parallélisme,
multiprogrammation, multi-tâche ?
Merci de toute suggestion !
Étant donné que les définitions ne sont pas unifiées, ni en anglais ni
en français, pas évident de fixer des traductions ou des termes.
Quelques éléments en vrac :
- Multi-tâches est un terme que j'ai surtout vu employé dans le
cadre des systèmes d'exploitation, plutôt pour décrire le fait
qu'ils savent gérer ces tâches que pour traiter la manière dont
elles-mêmes sont programmées.
- D'un autre côté "tâche" peut décrire assez bien des "trucs à
réaliser" par un programme (issu d'un découpage : les tâches
pouvant être exécutées en séquence, en parallèle, ...). Mais je
ne me souviens pas avoir vu le terme "multi-tâches" pour un
programme parallélisé.
- Je me souviens d'un article qui choisissait une distinction
intéressante entre concurrence (le fait que deux tâches aient
besoin d'accéder aux mêmes ressources [processeur exclu ici]) et
parallélisme (le fait d'exécuter des bouts de code en parallèle).
Ici on imagine un programme découpé en "tâches", qui peuvent être
concurrentes ou non (deux tâches peuvent avoir besoin d'accéder à
une structure de données commune par exemple, ou à un fichier
commun...). Cette notion de concurrence était indépendante du
fait que les tâches soient exécutées ou non en parallèle. C'est
juste un découpage conceptuel du programme. Les tâches peuvent
être exécutées les unes à la suite des autres (par exemple une
fonction appelle les fonctions correspondant aux tâches, ou
simplement le code est écrit tout à la suite dans une fonction
unique) ou en parallèle (dans plusieurs fils d'exécution
séparés). Dans le cas d'exécution parallèle de tâches
concurrentes, des mécanismes sont nécessaires pour éviter les
ennuis.
- On pourrait aussi dire que le temps du processeur est une
ressource partagée et que s'il y a plusieurs tâches elles sont
potentiellement concurrentes par rapport à cette ressource. Le
parallélisme serait alors le fait d'exécuter des tâches
réellement en parallèle : plutôt le fait d'avoir plusieurs cœurs
et/ou processeurs et de les utiliser que le simple fait d'avoir
plusieurs fils d'exécution. Une distinction peut-être moins
intéressante, si on s'intéresse surtout aux problèmes
d'interactions entre les tâches. D'autant que du coup elles sont
toutes concurrentes.
- Il me semble aussi avoir lu un article qui parlait de
programmation concurrente et concourante, la première traitant de
tâches qui ont des problèmes de concurrences d'accès à certaines
ressources, la seconde le simple fait que l'exécution ait lieu en
même temps (ou potentiellement en même temps, donc utiliser des
fils d'exécution suffit pour que la programmation soit
concourante dans cette définition me semble-t-il, peu importe
qu'il y ait un ou plusieurs cœurs pour exécuter les tâches
réellement en parallèle).
D'autres définitions ici (programmation concurrente "disjointe" ou
non) :
https://fr.wikipedia.org/wiki/Programmation_concurrente
Donc pour répondre plus précisément à ta question : "concurrence" et
"programmation concurrente" semblent adaptés. Avec distinction entre la
concurrence et le parallélisme si la concurrence représente le fait que
des tâches aient des conflits potentiels d'accès à des ressources
(indépendamment du fait qu'on les exécute réellement en parallèle ou
non) et le parallélisme représente le fait d'exécuter des tâches en
parallèle ou potentiellement en parallèle (que les tâches soient
concurrentes ou non).