Principes de base informatique - les processus et les discussions

Article de référence: HTTPS: //blog.csdn.net/feiBlog/article/details/85397287,
le pool de threads Java: https: //www.jianshu.com/p/7726c70cdc40
pipeline: https: //www.cnblogs.com/ 16b-TP / P 8886378.html /
https://www.cnblogs.com/zgq0/p/8780893.html
https://blog.csdn.net/sophia__yu/article/details/82390048?depth_1-

1. La différence entre les threads de processus:

Article de référence: https: //www.cnblogs.com/fubaizhaizhuren/p/7501403.html

  • Espace d'adressage: threads partagent le même processusCet espace d'adressage du processusEntre, et le processus est un espace d'adressage séparé.
  • Les ressources doivent: discussions dans les mêmes partager des ressources de processus tels que la mémoire de ce processus, E / S, cpu et ainsi de suite, maisRessources entre les processus sont indépendantsA.

Après un processus se bloque, il n'aura pas d'impact sur les autres processus en mode protégé, mais un effondrement des fils ensemble du processus sont morts. Ainsi , multi-thread robuste multi-processus que d' autres.
Lorsque le processus de commutation, la consommation de ressources, une efficacité élevée. Alors , quand il vient à la commutation fréquente, de meilleurs fils d'utilisation dans un processus. De même, si la demande en même temps et doivent partager l'exploitation simultanée de certaines variables ne peut être utilisé avec le fil ne peut pas traiter

  • Exécution: chaque chemin d'entrée de traitement individuel exécutant une séquence d'exécution de programme de séquence et l'entrée. Mais le fil ne peut pas exécuter de façon autonome, il doit exister en fonction de l'application, fournissant de multiples fils d'exécution contrôlées par l'application.
  • Un fil est l'unité de base de la planification du processeur, mais le processus est pas.
  • Les deux peuvent exécuter simultanément.

Avantages et inconvénients:

  • Fil d'exécution est en tête petite, mais pas propice à la gestion et la protection des ressources. Threads de fonctionner sur des machines SMP (système dual-CPU).
  • l'exécution des processus généraux grande, mais peut être une bonne gestion des ressources et la protection. Le procédé peut englober la machine vers l'avant.

Sept types de communication 2. Processus

Article de référence: https: //blog.csdn.net/weixin_42197191/article/details/82867154

  • duplex intégral: [1] se réfère au signal simultané (instantané) pour la transmission bidirectionnelle (A → B et B → A). Fait référence à un 'B tandis que B → A, instantanée synchronisé.
  • Half-duplex: se réfère à un signal transmis dans une seule direction une fois (A → B et B → A).
  • Les moyens traditionnels de communication:
    canaux nommés
    tuyaux anonymes
    signalent
  • communication IPC:
    file d' attente de message de la
    mémoire partagée
    sémaphore
  • Que le BSD traditionnel:
    prise

pipeline

  1. Définition: Le pipeline inter-processus est le moyen le plus tôt de communication. Lorsque la commande d'exécution de la coque, souvent le résultat d'une commande que la commande suivante est entrée, une pluralité de commandes avec l'achèvement d'une chose. Et cela est par pipeline pour atteindre.
    Insérer ici l'image Description
  2. Comment réaliser la communication entre le tuyau de processus
    extrémités (1) le processus parent pour créer un tuyau, afin d' obtenir des points de descripteur de fichier à deux tuyaux

(2) un processus parent fourche un processus enfant, le procédé comporte en outre deux sous-menus descripteurs de fichiers pointent vers le même ⼀ tuyau.

(3) fd-mère Fermer [0], l'enfant se ferme Fd [1], à savoir, l'extrémité de lecture du tuyau est procédé ⽗ fermée, l'extrémité d'écriture du tuyau est procédé Sous-fermé (parce que le tuyau supporte uniquement une communication unidirectionnelle). ⽗ ⾥ processus peut écrire dans le tuyau, le tuyau peut être lu Sous-processus ⾥, le tuyau est une file d'attente circulaire Utilisation procédé mis en oeuvre, les données sont lues à partir du flux borne START coule du côté d'écriture, de manière à réaliser une communication inter-processus.
Insérer ici l'image Description

2.1 tuyaux anonymes (tuyaux anonymes)

Définition: Le pipeline est inconnuUn type particulier de fichier, Les ressources correspondantes dans l'espace du noyau est maisEspace mémoireLe noyau dans cet espacefile d'attente circulairede façon temporaire dans un processus d'envoyer un message à un autre processus, cet espace noyau entièrementadministration et la maintenance du système d'exploitationL'application a besoin seulement, mais aussiseulementGrâce à l'appel système pour le visiter.

Très différents tubes sans nom et fichier ordinaire:Les ressources de base pipes sans nom seront automatiquement libérés après deux sorties de processus de communication. Avec différent fichier régulier, mais un programme, et a les caractéristiques d'un fichier ordinaire, vous pouvez utiliser les fonctions de lecture / écriture telles que lecture et écriture, mais note:Les fichiers spéciaux ne peuvent déposer des opérations IO

caractéristique

1, les conditions d'utilisation: ne seront utilisés avecIl parentéLa communication entre les processus (le parent et l' enfant, les processus de frères et soeurs, etc.) de
deux modes de communication:mode semi-duplex, Fd [0] en tant que borne de lecture, fd [1] en tant que borne d' écriture
3, le mode lecture-écriture: utilisations pour sa lecture et d' écritureIO File(Fonction lseek non pris en charge) (pour le flux d'octets: données aléatoires, il n'y a pas de frontière, envoyer et recevoir des données plus flexible: l'état utilisateur et peut être transmis une fois peut être transmis plusieurs fois, bien sûr, recevoir également des données telles, le orientées datagrammes: les données ont des limites distinctes, seules les données entières acceptés)
4, une opération de lecture bloc (attente): aucun cas des données dans le pipeline.
Écrit à bloc (attente): Lorsque le pipeline est rempli, le conduit est de taille inconnue 64K
5, rupture de la conduite:. La fin de lecture du tube est fermé à nouveau lorsque le pipeline de données d'écriture.
6, il y a des restrictions de taille (généralement 65536)
7, pipes sans nom que lorsque tous les processus sont terminés, les ressources dans le pipeline a été entièrement libéré, il a été autrement

pipes anonymes écrire des règles:

1. Ligne de données Pas de lecture (lecture): Si le descripteur est la caractéristique de blocage par défaut, la lecture bloquera suspendu à attendre,Tant que des données de pipeline;
2. conduit est rempli (écriture): Si le descripteur est la caractéristique de blocage par défaut, jusqu'à ce que l'opération d'écriture dans l' attente sera bloqué,Tant que les données sont supprimées; Si le descripteur est défini sur la caractéristique de non-blocage, l'opération d'écriture n'a pas la condition, retourne directement -1 erreur, le code d'erreur: EAGAIN.
3. Si tout le descripteur de fichier correspondant au côté d'écriture du tube est fermé, le pipeline a fini de lire les données, puis lecture renvoie 0;
4. Si tout le descripteur de fichier correspondant au côté lecture du tube est fermé, l'opération d'écriture est déclenchée anormale (parce que personne ne lire les données), le système d'exploitation traitera envoie SIGPIPE, le processus d'obtention de ce processus quittera;
5. lorsque la quantité de données à écrire ne dépasse pas PIPE_BUF (512 octets), linux garantie écrite atomique (opération ne sera pas interrompue, une étape),
une grande quantité de données à écrire à 6. lorsque le temps PIPE_BUF, linux ne garantit pas l'atomicité d'écriture.

2.2 tube nommé (FIFO)

  1. Définition: Les canaux nommés: a son propre nom, maisEnregistrer le nom du canal nommé sur le disque, mais le contenu stocké dans le noyau, Les pipes nommés, et le fichier ordinaireA un chemin de stockage disque, autorisations et autres fichiers d'information d'attribut,Mais le canal nommé et le fichier normal et les différences,Les canaux nommés ne tiennent pas des informations réelles sur le disque, mais stockées dans la mémoireAprès la fin des deux processusperte automatiqueAprès la fin de la voie de communication pour les fichiers canaux nommés exister en soi, qui est la différence entre le tuyau et le lieu anonyme.

Caractéristiques:

Caractéristiques:
1, tube nommé peut faireDeux processus indépendantsCommuniquer entre eux.
2, peut être nommé tuyauPathName pour indiquerEt il se trouve dans le système de fichiers.
3, le mode lecture-écriture: utilise pour son écriture et lectureIO File(Fonction lseek non pris en charge)
4, comme l'autre inconnue conduit
5. Lire tube nomméécriture de fin de fin est pas fixé. Certains de lecture, écriture autre extrémité. Bien sûr, les deux peuvent être lu ou l'autre extrémité peut aussi écrire, utiliser un processus parent-enfant à atteindre.

Les canaux nommés Caractéristiques ouvertes:

  1. Si vous ouvrez un tube nommé en lecture seule, la fonction ouverte bloque d'autres processus d'avoir à attendre que la voie d'écriture pour ouvrir le canal nommé, s'il n'y a pas de processus d'écrire le chemin fait pour ouvrir le tube nommé, le programme arrêtera ici
  2. Si en écriture seule ouvrir le canal nommé, ouvrez la fonction permet de bloquer d'autres processus d'attendre qu'il y ait un moyen de lire ce tube nommé ouvert, s'il n'y a pas de processus de lecture ainsi fait pour ouvrir le tube nommé, le programme s'arrête ici;
  3. Si un tube nommé est ouvert avec écriture ne bloque pas (mais les tuyaux sont unidirectionnels)

tuyaux anonymes et les pipes différences et connexions:

1. différence: les tuyaux anonymes tuyau int (int pipefd [2] ), tuyau anonyme est créé et ouvert pour renvoyer les descripteurs
pipes nommés ou mkfifo int mkfifo (const char chemin *, mode mode_t) Créer, n'a pas ouvert, si l'ouverture nécessité d'ouvrir;
canal anonyme est un moyen de parenté de communication inter-processus, et canal nommé comme moyen de communication entre les processus du même hôte,
tuyaux anonymesUn système de fichiers invisible, les pipes nommésTrouvé dans le système de fichiers, Il est un fichier de type spécial (type de tuberie).
2. Contact: tuyaux anonymes et les pipes nommésIl est le noyau d'un tamponet toutcommunication à sens unique; Addition après le canal nommé est ouvert (ouvert), et toutes les caractéristiques comme tuyau anonyme (tube lecteur anonyme au-dessus des règles et des caractéristiques de la conduite): portant à la fois synchrone (temps d'accès aux ressources critiques) et exclusive (même ressource critique la seule accessibilité du temps), le cycle de vie du pipeline avec le processus de retrait se termine.

Message Queue (IPC System V)

Message Queue est en fait un système d'exploitationUne file d'attente du noyau que nous avons créé,A travers cette file d'attenteclé identificateurChaque processus peut ouvrir la file d'attente, chaque processus peut utiliser cette file d'attente à la file d'attenteL'insertion d'un noeud ou noeud pour obtenir une communication complète entre les différents processus.

  • Transfert de données:
    organisation de bloc de données d'utilisateur avec un type, ajoutée à la file d' attente, le processus d'acquisition des autres blocs de données de la file d' attente, la file d'attente de message est envoyé avec un type de bloc, la file d' attente de messages est unLa pleine communication duplex, lecture-écriture (données peuvent être envoyées, les données peuvent être acceptées)

Message du cycle de vie de file d'attente avec le noyau,Si vous ne relâchez pas la file d'attente de messages n'est pas fermé ou système d'exploitation, une file d'attente de messages existera toujours.

Sémaphore :( nature: un compteur ayant une file d'attente (en cas, vous pouvez utiliser les ressources maintenant))

  1. Définition: L'une des communications inter-processus, pour atteindre inter-processusLa synchronisation et de l'exclusion mutuelle(Processus et le concept de threads)
  • Sync: contrôlabilité de synchronisation pour assurer l'accès aux ressources critiques (pour assurer ordonnée);
  • Exclusif: Le seul accès aux ressources critiques du même temps (assurer la sécurité).

Plusieurs processus en même temps, responsable d'une ressource critique lorsque vous avez besoin d'ouvrir le mécanisme de synchronisation et d'exclusion mutuelle pour un accès sécurisé aux ressources critiques à travers;

Ce montant du signalAucune ressource sont disponibles (contre 0)Lorsque, alors besoin d'attendre le blocage, la
synchronisation: la quantité de nombre de ressources que les changements de signal de 0 à 1,Informeront les autres interrompus bloquer attentePour obtenir après, à exploiter des ressources critiques, ce qui est la libération des ressources (contre + 1) Ressources (contre -1), puis suivre;
mutex: sémaphores
Si vous voulez réaliser l'exclusion mutuelle, alors son compteur est seulement 0/1 (un yuan sémaphores)
, Je reçois le compteur de ressources, pour que les autres ne peux pas.

opération PV

  • P: Obtenir le compteur 1 fonctionnement de la ressource et, si le compteur est égal à zéro, il est nécessaire d'attendre que quelqu'un pour libérer des ressources.
  • V Fonctionnement: ressources et libérer le compteur de sémaphores +1;

Dans le processus d'exploitation des ressources critiquesAvant d'abord obtenir le sémaphores, Il est déterminé si la ressource essentielle pour fonctionner, s'il n'y a pas de ressources sémaphores (contre 0),Nous devons attendreQuand d'autres libèrent le nombre de sémaphores des ressources sémaphores devient 1, le processus est en attente de réacquérir la ressource sémaphores se réveillera.

contre sémaphoreEst supérieur à 0, avec un signal représentatif de la quantité de ressources, peut être exploité;
Sémaphore compteurÉgal à 0, le signal représentatif de la quantité de ressources est pas nécessaire d'attendre.

Sémaphore comme la communication inter-processus, des moyens que tout le monde peut avoir accès au sémaphores, le sémaphore est en fait une ressource essentielle, bien sûr, le fonctionnement de ce sémaphore de ressource critique est pas un problème, car l'opération de sémaphores est unopération atomique.

Mémoire partagée (Le plus rapide communication inter-processus)

Le fonctionnement général des données à partir des donnéesCopie du mode utilisateur en mode noyau, Quand il est utilisé, puis copiés dans le mode utilisateur en mode noyau, mais ne nécessite pas deux étapes mémoire partagée, pourLe fonctionnement de l'espace d'adressage virtuel qui fonctionne la mémoire physiquePuis un autre espace d'adressage virtuel peut aussi avoir ces données qui n'a pas besoin de copier.

Parce que la mémoire partagéeAppliquer directement sur une table de page de mémoire physique de carte à l'espace d'adressage virtuel, Le fonctionnement de l'espace d'adressage virtuel est en fait la même région d'opération de mémoire physique, les autres moyens de communication par rapport à la transmission de données, une copie en deux étapes inférieure mode utilisateur et mode noyau de données, la mémoire partagée est doncle plus rapidecommunication inter-processus.

Insérer ici l'image Description

Différence 3. run () et start () de

Voir le programme suivant, deviner les résultats

public class HelloSogou{
     public static  void main(String[] a){
         Thread t=new Thread(){
             public void run(){Sogou();}
     };
     t.run();
     System.out.print("Hello");
     }
     static  void Sogou(){
     System.out.print("Sogou");
    }
}

En fait, cette fois-ci appelant la méthode rhum (), pas ouvert un nouveau thread, car il doit être effectué dans la séquence, le résultat est: SogouHello.

Ensuite, nous avons mis t.run () dans t.start () ne, le résultat est ce qu'il doit être, en fait, en raison des fils d'exécution est préemptive, il devrait donc être Bonjour et Sougou croisé aléatoire, mais en général le compilateur essaie de grand la plupart d'entre eux l'ancien bonjour, parce que généralement la première exécution du thread principal, cette fois-ci, vous pouvez essayer d'ajouter les principaux cycles de fil, vous trouverez est pas toujours le dernier à effectuer Sogou.

public class test {
    public static  void main(String[] a){
        Thread t=new Thread(){
            public void run(){Sogou();}
        };
        t.start();
        for (int i = 0; i <500 ; i++) {
            System.out.println("Hello");
        }
    }
    static  void Sogou(){
        System.out.print("=========Sogou");
    }
}

Et puis développez, si les deux méthodes sont ajoutées verrouillage synchronisées ce qui se passera,
selon la théorie, appelant la fonction principale (fil), la fonction principale d'ouvrir un autre thread et commencer, mais la fonction principale est la même méthode et Sogou serrure, de sorte que la fonction principale est terminée jusqu'à ce que le verrou est libéré, la méthode Sogou sera mis en œuvre, ce qui est la raison pour laquelle, remplacé début, est HelloSogou, vous pouvez essayer le code suivant.

public class HelloSogou{
     public static synchronized void main(String[] a){
         Thread t=new Thread(){
             public void run(){Sogou();}
     };
     t.run();
     System.out.print("Hello");
     }
     static synchronized void Sogou(){
     System.out.print("Sogou");
    }
}

Une variété de multi-threading peut

Titre
Supposons que A est un partage par le fil 1 et le fil 2 0 est la valeur initiale de la variable globale, le fil 1 et le fil 2 lors de l' exécution du code ci - dessous, le résultat final ne peut pas être un ()

boolean isOdd = false;
for(int i=1;i<=2;++i){
if(i%2==1)
	isOdd = true;
else
	 isOdd = false;
a+=i*(isOdd?1:-1);
}
  • idées de résolution de problèmes: l'ordre a un thread d'exécution d'influence, si les fils sont exécutés en même temps, alors il y aura un problème pour lire les données sale, en tenant compte de ces questions.

  • problème solution
    Insérer ici l'image Description

Publié 36 articles originaux · a gagné les éloges 11 · vues 10000 +

Je suppose que tu aimes

Origine blog.csdn.net/s_xchenzejian/article/details/100569141
conseillé
Classement