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

Лучшая архитектура для многих асинхронных операций записи Realm

Я получаю сбои из-за записи Realm, уже находящейся в транзакции, из-за того, что данные Realm обновляются из нескольких асинхронных сетевых обратных вызовов. Я понимаю, почему Realm дает сбой, но мне интересно, какая здесь правильная архитектура.

Пока что я могу свести к минимуму сбои, переместив отдельные транзакции записи в фоновые потоки, но рекомендуется ли это? Это зависит от того, что я не забываю делать это каждый раз. Или все сетевые запросы должны проходить через некую центральную расчетную палату, которая затем перемещает обратные вызовы (и, следовательно, записывает) в фоновые потоки? Или фоновые потоки даже не являются правильным способом сделать это?

17.04.2017

Ответы:


1

фоновая запись в Realm допустима (даже поощряется!), но стоит обратить внимание на то, что если фоновая очередь помечена как concurrent, то один и тот же поток может быть повторно использован для одной и той же очереди, это означает, что GCD может запланировать запуск одного из ваших блоков, пока другой находится в середине транзакции записи.

Лучший способ решить эту проблему — убедиться, что ваша очередь GCD, выполняющая запись, помечена как последовательная, а не параллельная.

17.04.2017
  • Даже с последовательными очередями GCD единственная гарантия заключается в том, что блоки, отправленные в эту очередь, не будут выполняться одновременно. Это не гарантирует, что блоки, отправленные в эту очередь, всегда будут находиться в одном и том же потоке. 19.01.2019
  • Новые материалы

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

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

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

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

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

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

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