J'ai étudié la programmation parallèle en utilisant GCD.
macOS 10.15.7 Xcode 12.1 Swift 5.3
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.
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.
--Créer une file d'attente --Déposer le bloc de code dans la file d'attente
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 **.
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.
.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.
.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.
.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.
.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.
.default
La priorité est un niveau entre les tâches et les utilitaires lancés par l'utilisateur.
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".
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