Из документации по адресной книге и моего понимания базовой реализации CoreData можно предположить, что адресная книга должна быть потокобезопасной, а выполнение запросов из нескольких потоков не должно вызывать проблем. Но мне сложно найти в документации какое-либо явное обсуждение безопасности потоков. Это вызывает несколько вопросов:
- Безопасно ли использовать + sharedAddressBook в нескольких потоках для доступа только для чтения? Я считаю, что да.
- Для доступа на запись в фоновых потоках, похоже, вам следует использовать + addressBook (и сохранить изменения вручную). Я правильно понимаю?
- Кто-нибудь исследовал влияние на производительность выполнения нескольких одновременных запросов к адресной книге в нескольких потоках? Это должно быть очень похоже на производительность выполнения нескольких запросов CoreData в нескольких потоках. Мне кажется, что я мало выиграю, выполняя параллельные запросы, поскольку я предполагаю, что они будут сериализованы при попадании в SQLLite, но я не уверен в этом.
Мне нужно сделать десятки запросов (некоторые сложные) к AddressBook, и я делаю это в фоновом потоке, используя NSOperation, чтобы избежать блокировки пользовательского интерфейса (что он сейчас и делает). Мой основной вопрос заключается в том, имеет ли смысл устанавливать максимальное количество одновременных операций на значение больше 1 и есть ли в этом какая-либо опасность, если приложение может одновременно писать в AddressBook в другом потоке.