Nano Hash - криптовалюты, майнинг, программирование

Многопоточность основных данных с дочерними контекстами

Я только начал изучать основные данные. Когда дело доходит до многопоточности, в некоторых блогах говорится, что в этом случае мы должны использовать дочерние контексты (путем создания контекста и установки его родителя) и просто вызывать метод PerformBlock:. Однако некоторые другие блоги говорят, что нам следует избегать этого подхода, так как он содержит много ошибок. Я только начал разрабатывать приложение, которое манипулирует большой базой данных, и менеджер проекта проголосовал за основные данные (вместо SQLLite). Может ли кто-нибудь дать мне несколько направлений. Должен ли я использовать стратегию дочерних контекстов (введенную с iOS 5) или есть лучший способ выполнить многопоточность с Core Data? Спасибо.



Ответы:


1

Должен ли я использовать стратегию дочерних контекстов (введенную с iOS 5) или есть лучший способ выполнить многопоточность с Core Data?

В дополнение к упомянутой вами концепции контексты управляемых объектов имеют встроенную поддержку параллелизма без родительских контекстов (см. https://developer.apple.com/library/ios/releasenotes/DataManagement/RN-CoreData/index.html).

Если вы создаете его с помощью initWithConcurrencyType:, вы можете использовать performBlock: и performBlockAndWait:, и потоки будут обрабатываться за вас, при условии, что вы будете следовать основным шаблонам, описанным в приведенной выше ссылке. Подход родительского/дочернего контекста может помочь вам с синхронизацией.

Здесь также описан подход на основе NSOperation: http://www.objc.io/issue-2/common-background-practices.html. Лично я бы не стал его использовать, потому что встроенных API достаточно, но статья очень хорошо написана и должна дать вам хорошее представление о том, что происходит.

Как вы это реализуете, зависит от потребностей вашего приложения.

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

Я бы проигнорировал их и сосредоточился на написании чистого кода для себя. Есть много приложений, которые используют многопоточность + Core Data без ошибок.

22.11.2013
  • Спасибо за ответ. Я также не хочу использовать многопоточность на основе NSOperation. Насколько я понял из вашего ответа, нет никакого вреда в использовании техники вложенных контекстов. 22.11.2013
  • Правильно. Основной способ избежать ошибок — убедиться, что вы понимаете принцип параллельного программирования в целом — как взаимодействуют очереди и потоки и т. д. Если вы новичок в этом, прочтите Руководство по параллельному программированию (developer.apple.com/library/ios/documentation/General/). Если вы хорошо разбираетесь в этом, я бы просто погрузился и начал. 22.11.2013
  • Ну, я не новичок в программировании с параллелизмом, так как я большой поклонник GCD. Хорошо, я прислушиваюсь к вашему совету и использую технику вложенных контекстов, так как моя база данных содержит до 30 000 строк и может быть больше (для одной таблицы). И это делает операции извлечения и сохранения очень медленными и блокирует пользовательский интерфейс. Спасибо за отличный ответ. Я принимаю и ставлю галочку. 22.11.2013
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..