[GCD] Principes de base de la programmation parallèle dans Swift

Quel est cet article?

J'ai étudié la programmation parallèle en utilisant GCD.

environnement

macOS 10.15.7 Xcode 12.1 Swift 5.3

le terme

fil

Chaque application iOS a un thread principal. Le thread principal affiche l'interface utilisateur et attend les événements qui se produisent. Des calculs compliqués dans le thread principal peuvent ralentir et geler votre application. Le multithreading est utile dans de tels cas. C'est un mécanisme qui déplace une tâche avec une charge élevée vers un thread d'arrière-plan et revient au thread principal lorsque la tâche est terminée.

queue

Un ensemble de blocs de code en attente d'être exécutés par un thread, en parallèle ou en série. Avec Swift, il vous suffit de ** gérer la file d'attente ** et vous n'avez pas du tout besoin d'être conscient des threads. Le système est responsable de fournir et d'allouer les ** threads nécessaires pour exécuter le code dans la file d'attente. ** **

Grand Central Dispatch: GCD API responsable de la gestion des files d'attente.

Le rôle de GCD

--Créer une file d'attente --Déposer le bloc de code dans la file d'attente

File d'attente principale

Le signal le plus important de tous. ** Tout bloc de code affectant l'interface utilisateur doit être exécuté dans la file d'attente principale **.

File d'attente en arrière-plan

Utilisé pour mettre en file d'attente des tâches autres que les tâches d'interface utilisateur de longue durée. S'exécute souvent en parallèle avec la file d'attente principale de l'interface utilisateur.

Niveau de priorité de la file d'attente en arrière-plan

Utilisateur interactif

.userInteractive Les tâches interactives de l'utilisateur sont les tâches les plus prioritaires du système. Utilisez ce niveau pour les tâches et les files d'attente qui interagissent avec les utilisateurs et mettent à jour activement l'interface utilisateur de l'application. Par exemple, utilisez-le pour des animations ou des classes qui suivent les événements de manière interactive.

Initiative des utilisateurs

.userInitiated Les tâches d'initiative utilisateur sont en second lieu après les tâches interactives de l'utilisateur en termes de priorité système. Attribuez cette classe à des tâches qui donnent des résultats immédiats pendant que l'utilisateur fait quelque chose ou à des tâches qui empêchent l'utilisateur d'utiliser l'application. Par exemple, vous pouvez utiliser ce niveau de qualité de service pour charger le contenu de l'e-mail que vous souhaitez afficher à vos utilisateurs.

utilitaire

.utility Les tâches utilitaires ont une priorité plus faible que les tâches lancées par l'utilisateur et les niveaux d'interaction de l'utilisateur, mais une priorité plus élevée que les tâches en arrière-plan. Attribuez cette classe de qualité aux tâches qui n'empêchent pas les utilisateurs de continuer à utiliser l'application. Par exemple, vous pouvez affecter cette classe à des tâches à long terme dans lesquelles les utilisateurs ne suivent pas activement leur progression.

Contexte

.background Les tâches d'arrière-plan sont la priorité la plus basse de toutes les tâches. Attribuez ce niveau à la tâche ou à la file d'attente de répartition utilisée pour effectuer le travail pendant que l'application s'exécute en arrière-plan. Par exemple, les tâches de maintenance ou les nettoyages.

la norme

.default La priorité est un niveau entre les tâches et les utilitaires lancés par l'utilisateur.

Ajouter du code à la file d'attente

Ajouter de manière synchrone

Si l'élément de tâche est exécuté de manière synchrone par la méthode sync, le programme attend que l'exécution se termine avant que la méthode ne soit appelée.

python


DispatchQueue.main.sync {
	// Code to be executed
}

Ce code peut être compris comme "l'envoi d'une file d'attente synchrone au thread principal".

Ajouter de manière asynchrone

Lorsqu'un élément de tâche est exécuté de manière asynchrone par la méthode async, la méthode est appelée immédiatement.

python


DispatchQueue.global().async {
	// Code to be executed
}

Ce code peut être compris comme «l'envoi d'une file d'attente asynchrone à un thread d'arrière-plan».

Recommended Posts

[GCD] Principes de base de la programmation parallèle dans Swift
[GCD] Principes de base de la classe DispatchQueue
Trouver une approximation de cosx avec Swift
L'histoire de l'apprentissage de Java dans la première programmation
bases de la programmation Java
Mémo d'implémentation SKStoreReviewController dans l'interface utilisateur Swift d'iOS14
Bases de Ruby
Ordre des modificateurs utilisés dans Swift (voir SwiftLint)
Comment exécuter des tâches en parallèle avec Swift dans Swift Package
À propos du problème de blocage dans le traitement parallèle dans la version 4.0 de gem'sprockets
Trouvez la valeur approximative de log (1 + x) avec Swift
Programmation par contraintes en Java
Bases de la programmation Java Practice-array
Divide devient 0 dans Swift
Principes de base de l'instruction try-with-resources
Sortie en multiples de 3
Exécution parallèle en Java
Tableau multidimensionnel dans Swift
Liste des appareils pouvant être prévisualisés avec Swift UI
Comment changer la couleur d'arrière-plan de la barre de navigation, etc. dans Swift UI