Параллелизм базовых данных (NSOperation) - PullRequest
3 голосов
/ 11 марта 2011

В Apple документы написано:

... вы должны создать контекст в main (для последовательной очереди) или start (для параллельной очереди).

Но я действительно не понимаю, в чем разница. Почему я не могу создать контекст в main для параллельной очереди? Я попробовал это, и это работает абсолютно так же, как если бы я делал это в start.

Есть еще одна вещь, которая смущает меня. Из документов для start метод:

... Если вы реализуете параллельная операция, вы должны переопределить этот метод и использовать его для начать свою операцию.

Итак, еще раз, почему я не могу инициализировать все в main (или, возможно, не должен инициализировать)?

Ответы [ 2 ]

5 голосов
/ 11 марта 2011

Может быть разница между тем, что вы называете «контекстом» и «одновременным», и тем, что Apple подразумевает под терминами. Они используют «одновременный» определенным (и запутанным) способом. Этот раздел из Управление параллелизмом с NSOperation может помочь:

Существует несколько различных способов использования NSOperation, но наиболее распространенным является написание собственного подкласса и переопределение одного метода: main. Основной метод вызывается для выполнения операции, когда NSOperationQueue планирует его выполнение. Классы NSOperation, написанные таким образом, известны как непараллельные операции, потому что разработчик не несет ответственности за порождение потоков - многопоточность обрабатывается суперклассом. (Не путайте терминологию: просто потому, что операция не является одновременной, это не означает, что ее нельзя выполнить одновременно, это просто означает, что вам не нужно обрабатывать параллелизм самостоятельно.)

Если вам нужен больший контроль над потоками и средой выполнения ваших операций, вы можете использовать параллельные операции. Для этого вы создаете подкласс NSOperation и переопределяете метод start. В методе start вы можете создавать потоки и настраивать среду перед вызовом основного метода. Вы также должны поддерживать состояние NSOperation путем установки свойств, таких как isExecuting и isFinished. Короче говоря, параллельные операции дают вам гораздо больше контроля, но также требуют больше усилий - для большинства задач достаточно одновременных операций.

2 голосов
/ 11 марта 2011

Нет причины, по которой вы не можете создать контекст в main () для параллельной очереди, но, поскольку вам приходится управлять циклом выполнения в main, обычно лучше настроить такие вещи, как контекст в start (), если вы используют эту технику.

...