Technopedia Center
PMB University Brochure
Faculty of Engineering and Computer Science
S1 Informatics S1 Information Systems S1 Information Technology S1 Computer Engineering S1 Electrical Engineering S1 Civil Engineering

faculty of Economics and Business
S1 Management S1 Accountancy

Faculty of Letters and Educational Sciences
S1 English literature S1 English language education S1 Mathematics education S1 Sports Education
  • Registerasi
  • Brosur UTI
  • Kip Scholarship Information
  • Performance
  1. Weltenzyklopädie
  2. Programmation concurrente — Wikipédia
Programmation concurrente — Wikipédia 👆 Click Here! Read More..
Un article de Wikipédia, l'encyclopédie libre.
Si ce bandeau n'est plus pertinent, retirez-le. Cliquez ici pour en savoir plus.
Si ce bandeau n'est plus pertinent, retirez-le. Cliquez ici pour en savoir plus.

Certaines informations figurant dans cet article ou cette section devraient être mieux reliées aux sources mentionnées dans les sections « Bibliographie », « Sources » ou « Liens externes » (août 2024).

Vous pouvez améliorer la vérifiabilité en associant ces informations à des références à l'aide d'appels de notes.

La programmation concurrente est un paradigme de programmation tenant compte, dans un programme, de l'existence de plusieurs piles sémantiques qui peuvent être appelées threads, processus ou tâches. Elles sont matérialisées en machine par une pile d'exécution et un ensemble de données privées.

La concurrence est indispensable lorsque l'on souhaite écrire des programmes interagissant avec le monde réel (qui est concurrent) ou tirant parti de multiples unités centrales (couplées, comme dans un système multiprocesseurs, ou distribuées, éventuellement en grille ou en grappe).

Classification

[modifier | modifier le code]

On distingue trois types de concurrence :

  • disjointe : les entités concurrentes ne communiquent pas et n'interagissent pas entre elles ;
  • compétitive : un ensemble d'entités concurrentes en compétition pour l'accès à certaines ressources partagées (par exemple le temps CPU, un port d'entrées/sorties, une zone mémoire) ;
  • coopérative : un ensemble d'entités concurrentes qui coopèrent pour atteindre un objectif commun. Des échanges ont lieu entre les processus. La coopération est un élément primordial de la programmation concurrente.

La programmation concurrente est plus complexe que la programmation impérative, fonctionnelle ou encore déclarative. En fait, à chacun de ces modèles de programmation, on peut associer une version concurrente, par extension de la sémantique du langage de programmation associé. Par exemple, Prolog a été étendu en Concurrent Prolog, Haskell avec Concurrent Haskell, Java et Ada sont des langages à objets avec des primitives pour la concurrence, etc.

Les techniques spécifiques pour le traitement de la concurrence peuvent être classées en allant de la moins expressive (mais la plus facile à utiliser) à la plus expressive (et la plus complexe). On peut utiliser les niveaux suivants :

  1. Concurrence déclarative (langage fonctionnel étendu avec des threads) ;
  2. Concurrence en programmation logique ;
  3. Concurrence déclarative avec des ports et envoi de messages ;
  4. Concurrence impérative avec ports et envoi de messages ;
  5. Concurrence impérative avec mémoire partagée.

Problèmes

[modifier | modifier le code]

Le phénomène central introduit par la concurrence est le suivant : dans un programme non concurrent, ou séquentiel, l'ordre d'exécution des instructions élémentaires du programme est un ordre total qui reste le même d'une exécution à l'autre pour les mêmes paramètres en entrée. Dans un programme concurrent, l'exécution forme un ordre partiel. Comme la politique d'ordonnancement est généralement inconnue (elle est déterminée par le noyau du système d'exploitation par exemple) ou incontrôlée, on parle de l'indéterminisme de l'ordre d'exécution.

Les problèmes induits par la concurrence se manifestent dans les cas de la concurrence compétitive et coopérative. À cause de l'indéterminisme de l'exécution, l'accès à des données partagées par les entités concurrentes peut conduire à des incohérences au niveau des relations liant ces données. Pour cela, on a historiquement utilisé différentes primitives de synchronisation comme les mutex, les moniteurs ou encore les sémaphores. Ces différentes primitives sont toutes une forme plus ou moins évoluée de verrouillage qui sert à mettre en place la synchronisation des entités concurrentes (sur une ressource ou plus généralement une section critique). Mais leur utilisation ne s'effectue pas sans difficultés, on distingue notamment deux problèmes majeurs :

  • interblocages (ou deadlocks) entre entités concurrentes (processus ou threads) qui attendent, par exemple, que l'autre relâche un verrou acquis pour pouvoir progresser ;
  • famines (ou starvations) d'une entité (processus ou thread) essayant d'acquérir une ressource, mais jamais ordonnancé au moment où elle est disponible.

Des abstractions de plus haut niveau ont été développées afin de disposer de l'expressivité de la concurrence sans les inconvénients associés à l'usage des primitives de synchronisation de bas niveau.

Solutions

[modifier | modifier le code]

Pour chaque type de programmation concurrente, on dispose d'abstractions de haut niveau facilitant l'écriture de programmes concurrents.

Dans le cas de processus en compétition pour des ressources partagées, la notion de transaction a été développée dès les années 1970. Les systèmes transactionnels, utilisés principalement pour des bases de données partagées, s'appuient sur la théorie de la sérialisabilité pour garantir un accès concurrent à des ressources partagées (concurrence de type 4 et 5). La mémoire transactionnelle logicielle (STM) est une tentative pour appliquer ce modèle des transactions d'une façon plus générale à toute opération sur la mémoire, elle présente plusieurs avantages sur l'approche classique par verrous et connaît depuis peu un grand regain d'intérêt.

Dans le cas de processus en coopération en vue d'un but commun, au moins deux techniques ont fait leurs preuves : la communication inter-processus utilisant exclusivement l'envoi de messages, et la synchronisation dataflow, c’est-à-dire l'ordonnancement dynamique des threads en fonction de la disponibilité des données (au moyen de variables spéciales de type future ou variable logique). Les langages de programmation Erlang ou Oz permettent d'écrire des applications concurrentes et distribuées, avec un soin particulier apporté aux questions de gestion d'exception. Erlang et Oz exploitent le principe de l'envoi de messages, et Oz offre de plus la synchronisation dataflow.

Voir aussi

[modifier | modifier le code]

Articles connexes

[modifier | modifier le code]
  • Calcul distribué : la concurrence est souvent liée à la distribution. Un programme dont l'exécution est distribuée sur plusieurs hôtes est intrinsèquement concurrent. Pourtant, ce n'est pas toujours le cas ; l'utilisation de protocoles de communication entre parties distribuées d'un programme, comme les RPC (appels de procédure à distance) ou RMI (invocation de méthode à distance), peut rendre non-concurrent un programme distribué.
  • Calcul parallèle
  • Therac-25, un cas concret d'accidents liés à une mauvaise mise en œuvre
  • distcc, distribution des tâches de compilation
  • langage Portal
  • langage Occam
  • langage Ada 95
  • langage Rust, conçu pour être « un langage sécurisé, concurrent, pratique »
  • programmation LabVIEW

Liens externes

[modifier | modifier le code]

  • Notice dans un dictionnaire ou une encyclopédie généralisteVoir et modifier les données sur Wikidata :
    • Britannica
v · m
Synchronisation en programmation concurrente
Principes de base
  • Atomicité
  • Section critique
  • Communication inter-processus
  • Thread Local Storage
Patrons de conception
  • Barrière de synchronisation
  • Futex
  • Futures
  • Moniteur
  • Mutex
  • Sémaphore
  • Spinlock
  • Algorithme de Peterson
  • Algorithme de Dekker
  • Algorithme du banquier
  • Algorithme de Maekawa
Problèmes classiques
  • Couplage fort
  • Famine
  • Interblocage
  • Inversion de priorité
  • Situation de compétition
v · m
Paradigmes de programmation
Impérative
Structurée
  • Orientée composant
  • Orientée objet
    • Orientée aspects
    • Orientée prototype
    • Orientée classe
  • Procédurale
    • Événementielle
Déclarative
  • Fonctionnelle
  • Logique
  • Par contraintes
  • Descriptive
Métaprogrammation
  • Réflexive
  • Macros
  • Patrons
Autres
  • Concurrente
  • Par contrat
  • Réactive
  • Synchrone
Comparaison des langages de programmation multi-paradigmes
v · m
Domaines de l'informatique
Remarque : cette liste s'inspire du système de classification informatique de l'ACM édité en 2012
Matériel
  • Circuit imprimé
  • Périphérique
  • Circuit intégré
  • Intégration à très grande échelle
  • Circuit logique programmable
  • Informatique durable
  • Conception assistée par ordinateur pour l'électronique
Appareil et organisation
d'un système
  • Architecture matérielle
  • Architecture de processeur
  • Machine à calculer
  • Mécanographie
  • Calculateur analogique
  • Calculatrice
  • Calculateur quantique
  • Ordinateur
  • Système embarqué
  • Système temps réel
  • Sûreté de fonctionnement
Réseau
  • Architecture de réseau
  • Protocole de communication
  • Équipement d'interconnexion de réseau informatique
  • Planificateur de réseau (en)
  • Rendement du réseau (en)
  • Service réseau
Organisation du logiciel
  • Interprète
  • Middleware
  • Machine virtuelle
  • Système d'exploitation
  • Qualité logicielle
Théorie et outil (en)
de programmation
  • Paradigme de programmation
  • Langage de programmation
  • Compilateur
  • Langage dédié
  • Langage de modélisation
  • Cadriciel
  • Environnement de développement
  • Gestion de configuration logicielle
  • Bibliothèque logicielle
  • Dépôt
Développement de logiciel
  • Software development process
  • Analyse des exigences
  • Conception de logiciel
  • Assemblage de logiciel (en)
  • Déploiement de logiciel (en)
  • Maintenance du logiciel
  • Équipe de programmation (en)
  • Open source
Théorie du calcul (en)
  • Modèle de calcul
  • Langage formel
  • Théorie des automates
  • Théorie de la complexité
  • Logique (en)
  • Sémantique
Algorithmique
  • Algorithme
  • Conception d'algorithme
  • Analyse de la complexité des algorithmes
  • Algorithme évolutionniste
  • Algorithme probabiliste
  • Géométrie algorithmique
  • Génération procédurale
Mathématiques
de l'informatique
  • Mathématiques discrètes
  • Probabilité
  • Statistique
  • Logiciel mathématique (en)
  • Théorie de l'information
  • Analyse
  • Analyse numérique
Système d'information
  • Base de données
  • Mémoire (informatique)
  • Progiciel
  • Logiciel social
  • Système d'information géographique
  • Système d'aide à la décision
  • Supervision
  • Base de données multimédia
  • Exploration de données
  • Bibliothèque numérique
  • Plateforme
  • Marketing électronique
  • World Wide Web
  • Recherche d'information
Sécurité
  • Cryptographie
  • Méthode formelle
  • Service de sécurité (en)
  • Système de détection d'intrusion
  • Sécurité matérielle (en)
  • Sécurité du réseau
  • Sécurité de l'information
  • Sécurité de l'application (en)
Interactions humain-machine
  • Design numérique
  • Informatique sociale (en)
  • Informatique ubiquitaire
  • Visualisation (en)
  • Accessibilité numérique
Concurrence (en)
  • Programmation concurrente
  • Parallélisme
  • Calcul distribué
  • Multithreading
  • Multiprocesseur
Intelligence artificielle
  • Traitement automatique des langues
  • Représentation des connaissances
  • Vision par ordinateur
  • Planification
  • Optimisation
  • Philosophie de l'intelligence artificielle
  • Intelligence artificielle distribuée
Apprentissage automatique
  • Apprentissage supervisé
  • Apprentissage non supervisé
  • Apprentissage par renforcement
  • Apprentissage multi-tâches (en)
  • Validation croisée
Infographie
  • Animation par ordinateur
  • Animation 2D numérique
  • Animation 3D
  • Rendu photoréaliste
  • Retouche d'image
  • Processeur graphique
  • Réalité mixte
  • Réalité virtuelle
  • Compression d'image
  • Conception paramétrique
Audio informatique
  • Générateur de son programmable
  • Processeur de signal numérique
  • Synthétiseur analogique
  • échantillonnage
  • Séquenceur musical
  • Tracker (musique)
  • Musique assistée par ordinateur
Informatique appliquée
  • Commerce en ligne
  • Logiciel d'entreprise
  • Mathématiques computationnelles
  • Physique numérique
  • Chimie numérique
  • Biologie numérique
  • Sciences sociales numérique (en)
  • Ingénierie numérique
  • Informatique médicale
  • Art numérique
  • Édition électronique
  • Cyberguerre
  • Vote électronique
  • Jeu vidéo
  • Traitement de texte
  • Recherche opérationnelle
  • Technologies éducatives
  • Gestion électronique des documents
v · m
Informatique théorique
Codage
  • Codage de l'information
  • Compression de données
  • Chiffrement
  • Cryptanalyse
  • Cryptographie
  • Théorie de l'information
Modèles de calcul
  • Calculabilité
  • Décidabilité et indécidabilité
  • Ensemble récursif
  • Problème de l'arrêt
  • Ensemble récursivement énumérable
  • Machine de Turing
  • Thèse de Church
  • Automate cellulaire
  • Réseau de neurones artificiels
  • Réduction polynomiale
  • Problème NP-complet
  • Principe de Church-Turing-Deutsch
Algorithmique
  • Algorithmique
  • Algorithme glouton
  • Algorithme probabiliste
  • Algorithme génétique
  • Complexité algorithmique
  • Analyse d'algorithme
  • Diviser pour régner
  • Heuristique
  • Programmation dynamique
  • Géométrie algorithmique
  • Algorithmes de tri
  • Algorithmique du texte
  • Exploration de données
  • Science des données
  • Apprentissage profond
  • Test de primalité
  • Structure de données
  • Arbre enraciné
  • Concurrence
  • Parallélisme
Syntaxe
  • Réécriture
  • Compilation
  • Expression régulière
  • Grammaire formelle
  • Langage rationnel
  • Ensemble rationnel
  • Théorie des langages
  • Théorie des automates
  • Automate fini
  • Automate sur les mots infinis
  • Automate d'arbres
  • Automate à pile
  • Hiérarchie de Chomsky
  • Linguistique informatique
Sémantique
  • Interprétation abstraite
  • Méthodes formelles
  • Vérification de modèles
  • Sémantique des langages de programmation
  • Sémantique dénotationnelle
  • Sémantique axiomatique
  • Sémantique opérationnelle
Logique mathématique
  • Assistant de preuve
  • Calcul des prédicats
  • Correspondance de Curry-Howard
  • Fonction récursive
  • Lambda-calcul
  • Théorèmes d'incomplétude de Gödel
  • Théorie des types
Mathématiques discrètes
  • Combinatoire
  • Algorithme du simplexe
  • Optimisation combinatoire
  • Théorie des graphes
  • Algorithmes de la théorie des graphes
  • Recherche opérationnelle
  • Théorie de la décision
  • Analyse numérique
  • icône décorative Portail de la programmation informatique
Ce document provient de « https://fr.teknopedia.teknokrat.ac.id/w/index.php?title=Programmation_concurrente&oldid=219035678 ».
Catégories :
  • Programmation concurrente
  • Paradigme de programmation
Catégories cachées :
  • Article avec source à lier
  • Page utilisant un modèle Bases inactif
  • Page utilisant P1417
  • Page pointant vers des bases externes
  • Page pointant vers des dictionnaires ou encyclopédies généralistes
  • Page utilisant le modèle Autorité inactif
  • Article contenant un appel à traduction en anglais
  • Portail:Programmation informatique/Articles liés
  • Portail:Informatique/Articles liés

  • indonesia
  • Polski
  • الرية
  • Deutsch
  • English
  • Español
  • Français
  • Italiano
  • مصر
  • Nederlands
  • 本語
  • Português
  • Sinugboanong Binisaya
  • Svenska
  • Українска
  • Tiếng Việt
  • Winaray
  • 中文
  • Русски
Sunting pranala
Pusat Layanan

UNIVERSITAS TEKNOKRAT INDONESIA | ASEAN's Best Private University
Jl. ZA. Pagar Alam No.9 -11, Labuhan Ratu, Kec. Kedaton, Kota Bandar Lampung, Lampung 35132
Phone: (0721) 702022
Email: pmb@teknokrat.ac.id