2

С CoreData, нормально ли иметь несколько контекстов в одном потоке? На работе мы обсуждаем, может ли множественный контекст в основном потоке вызвать тупик. Я не могу найти причину, чтобы не делать этого, но я обеспокоен тем, что когда один из основных контекстов потока сохраняет и объединяется в другой контекст основного потока, это может вызвать тупик.С CoreData это нормально, чтобы иметь несколько контекстов в одном потоке?

Примечание: похоже, существует связанный билет, который фактически НЕ связан вообще: Multiple contexts in the main thread: why and when use them? Этот билет ТОЛЬКО обсуждается с использованием множества контекстов в целом и контекста, и на самом деле никогда не обсуждает какие-либо проблемы с использованием нескольких контекстов на тот же поток.

+0

Для потокобезопасного объекта coredata в потоке должен быть один контекст. – Retro

+0

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

ответ

-1

https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CoreData/Articles/cdConcurrency.html

и посмотреть здесь тоже

http://www.cocoanetics.com/2012/07/multi-context-coredata/

Если вы решили не использовать нить сдерживания шаблон, то есть, если вы пытаетесь передать управляемые объекты или контексты между потоками, и поэтому вы должны быть предельно осторожны в отношении блокировки, и, как следствие, вы, скорее всего, отрицаете какую-либо выгоду, которую вы можете получить в результате многопоточности. Вам также необходимо учитывать, что:

Каждый раз, когда вы управляете или управляете управляемыми объектами, вы используете связанный контекст управляемого объекта. Основные данные не представляют собой ситуацию, когда чтение является «безопасным», но изменения «опасны» - любая операция «опасна», поскольку каждая операция имеет эффекты когерентности кеша и может вызвать сбои.

Самостоятельно управляемые объекты не являются потокобезопасными. Если вы хотите работать с управляемым объектом в разных потоках, вы должны заблокировать его контекст.

+0

В вашем ответе конкретно говорится об использовании нескольких потоков. Меня интересует только один поток. Как ваш ответ относится к вопросу? Что мне здесь не хватает? –

+0

Исправьте меня, если я ошибаюсь, но вы сказали «на самом деле никогда не обсуждают какие-либо проблемы с использованием нескольких контекстов в одном потоке», поэтому я пытался объяснить проблему несколькими контекстами в потоке. – Retro

+0

Прошу прощения, но вы говорите о передаче управляемых объектов между потоками. Я говорю только об использовании основного потока или одного потока. По сути, я говорю о НЕ использовании нескольких потоков. Так что я вообще не спрашиваю о безопасности потоков. То, о чем я прошу, - это избежать нескольких потоков, но при этом использовать несколько контекстов только для одного потока. –

 Смежные вопросы

  • Нет связанных вопросов^_^