1. Préface
Récemment, j'interviewais et examinais à nouveau le multi-threading, espérant approfondir ma compréhension du multi-threading.
1. Qu'est-ce qu'un processus?
1). Pour comprendre les fils, nous devons d'abord comprendre le processus. En termes simples, un processus est une application exécutée dans le système.
2). Chaque thread existe indépendamment et fonctionne dans son espace mémoire dédié et protégé.
3). Par exemple, lors de l'ouverture du système QQ ou Xcode, deux processus seront ouverts séparément comme indiqué sur la figure:
4) Nous pouvons afficher les processus activés dans le système Mac via le "moniteur d'activité".
2. Qu'est-ce qu'un fil?
1). Un processus doit avoir des threads pour exécuter des tâches, c'est-à-dire qu'un processus doit avoir au moins un thread.
2). Les threads sont l'unité d'exécution de base d'un processus, et toutes les tâches d'un processus (programme) sont exécutées dans le thread.
3). Par exemple, utiliser Kugou pour jouer de la musique et utiliser le tonnerre pour télécharger des films nécessite tous en cours d'exécution dans le fil comme indiqué sur la figure:
3. Qu'est-ce que Thread Serial?
1). Un thread est exécuté en série (exécuté séquentiellement), ce qui signifie qu'un thread ne peut exécuter qu'une seule tâche dans le même temps.
2). Diagramme d'exécution en série, comme un thread télécharge 3 fichiers (fichiers a, b, c)
4. Qu'est-ce que le multi-lancement?
1). Plusieurs threads peuvent être ouverts dans un processus, et chaque thread peut effectuer différentes tâches simultanément (simultanément).
2). LISTE DE RELATION SIMILE: Processus ----> Atelier; Thread ----> Workshop Workers
3). Diagramme multithread, comme l'ouverture de 3 threads en même temps pour télécharger 3 fichiers (fichiers A, B, C)
5. Principe de lecture multiple
1). En même temps, le CPU ne peut exécuter qu'un seul thread et un seul thread fonctionne (exécution).
2). L'exécution simultanée (simultanée) multithread est en fait les planifications (commutateurs) CPU (commutateurs) entre plusieurs threads.
3). Si le CPU planifie les threads assez rapidement, il entraînera l'illusion d'une exécution simultanée multi-thread.
4). Inconvénients du multithreading:
1. Chaque thread occupera une certaine quantité d'espace mémoire (par défaut: le thread principal occupe 1 Mo et le thread enfant occupe 512 Ko).
Si trop de fils sont allumés, il occupera beaucoup d'espace mémoire, ce qui entraînera la dégradation des performances du programme.
2. Plus il y a de threads, plus les frais généraux du fil de planification du CPU sont élevés (similaires à plus de travailleurs d'usine, plus les frais généraux d'usine) sont importants.
3. Rendre la programmation plus complexe: telles que la communication de données multithread et le partage de données entre plusieurs threads.
5). Avantages du multithreading:
1. Peut améliorer de manière appropriée l'efficacité d'exécution du programme.
2. Peut améliorer de manière appropriée l'utilisation des ressources (CPU et utilisation de la mémoire)
6. Quel est le fil principal?
1). Un thread sera ouvert par défaut après l'ouverture d'un programme iOS. Ce thread est appelé "Thread principal" ou "thread d'interface utilisateur".
2). Les fonctions principales du fil principal:
1. Afficher / actualiser l'interface d'interface utilisateur
2. Gérer les événements d'interface utilisateur (tels que les événements de clic, les événements de défilement, les événements de glisser, etc.)
3). Notes sur le fil principal:
1. Ne placez pas les opérations longues dans le fil principal. Les opérations longues dans le fil principal entraîneront un retard de programme.
7. Démo de l'opération chronophage
1) Demo fonctionnant directement dans le fil principal
- (void) TouchesBegan: (nSet <Uitouch *> *) touches withEvent: (uiecent *) event {// Obtenez la méthode d'exécution actuelle et le thread actuel // numéro == Thread // numéro! = Autres threads, threads enfants et threads secondaires NSLOG (@ "% s ----% @", __ Func __, [nsthreadread]; Opération d'interface utilisateur pour bégayer [auto-timeOperation];} # Operation de pragma de marque de marque- (void) LongTimeOperation {for (int i =; i <; i ++) {nslog (@ "% d", i);}}2) Demo fonctionnant dans un fil d'enfant
- (void) touchesBegan: (nSset <uitouch *> *) touches withEvent: (uiecent *) event {// Obtenez la méthode d'exécution actuelle et le thread actuel // numéro == Thread // numéro! = Autres threads, threads enfants et Threads secondaires NSLOG (@ "% s ----% @", __ Func __, [nsthreadread]; Dans le thread enfant à exécuter sans affecter l'opération d'interface utilisateur [auto-performantLelectorBackground: @Selector (LongtimeOperation) WithObject: Nil];} # Pragma Mark consommant un opération consommé- (void) LongtimeOperation {pour (int i =; i <; i ++) {nslog (@ "% d", i);}}Le contenu ci-dessus est la connaissance multi-threading d'iOS qui vous est présentée par l'éditeur. J'espère que cela vous sera utile!