NSOperationQueue et concurrent ou non simultané
Je veux installation sérialisé tâche de la file d'attente à l'aide de NSOperationQueue mais je suis un peu confus par la terminologie abordés dans les documents.
Dans le contexte d'une NSOperation
l'objet, les conditions simultanées et
non simultanées ne sont pas nécessairement
reportez-vous à la side-by-side de l'exécution de
les threads. Au lieu de cela, un non-simultanées
l'opération est celui qui s'exécute à l'aide
l'environnement qui est fourni pour
alors qu'une concurrente l'opération est
responsable de la mise en place de ses propres
environnement d'exécution.
Que signifie le programme d'installation "propre environnement d'exécution'?
Mon NSOperation dérivé de tâches à exécuter en série dans l'ordre où ils ont été ajoutés à la file d'attente.
Donc j'ai pensé que cela implique un "non-concurrente l'opération" j'aimerais mettre en œuvre "principale" pour le travail qui doit être fait et aussi de retour PAS pour "isConcurrent'. En outre, NSOperationQueue "setMaxConcurrentOperationCount" serait fixé à 1.
La raison pour laquelle je ne suis pas la configuration de NSOperation dépendance entre ces tâches est parce que l'ordre qu'ils sont insérés dans la file d'attente est de l'ordre elles doivent être faites.
Sont ces hypothèses correctes?
source d'informationauteur Alexi Groove
Vous devez vous connecter pour publier un commentaire.
NSOperationQueue
toujours exécute les opérations simultanément, tout en prenant des dépendances en compte.Un "non-cumul" opération nécessite un thread séparé pour exécuter simultanément.
NSOperationQueue
est responsable de la fourniture de ce fil. En d'autres termes, la non-concordance de l'opération dépend deNSOperationQueue
pour en faire un concurrent à l'opération.Un "concurrent" de l'opération est simultanées sur son propre; il n'a pas besoin
NSOperationQueue
de créer un thread pour ça. Un exemple serait une opération qui utilise asynchrone fichier IO.Si vous souhaitez disposer de deux ou plus des opérations à exécuter en série, vous devez utiliser les dépendances.
Si vous voulez une opération de bloquer le thread principal, puis ne pas utiliser
NSOperationQueue
; il suffit d'exécuter chaque opération, l'un après l'autre sur le thread principal.Pour définir manuellement le maximum d'opérations simultanées, l'utilisation de la méthode sur operationQueue
setMaxConcurrentOperationCount:
Avez-vous vraiment besoin de sous-classe
NSOperation
? Pourquoi ne pas simplement utiliserNSInvocationOperation
et sesaddDependency:
méthode?Voir ma réponse dans cette SORTE de question.