Ищу один или два модуля, связанных с блокировкой и планированием обновлений.

Вопрос или проблема

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

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

Поэтому я ищу один или два модуля для выполнения двух задач:

  1. блокировка с истечением срока действия, которую могут использовать две разные длительно работающие функции (которые вызывают другие функции с обратными вызовами), чтобы убедиться, что они не вмешиваются друг в друга

  2. простой модуль/функция, который говорит: ‘выполните эту функцию сейчас или запустите ее снова после завершения текущего выполнения’.

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

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

Вот что я решил сделать: я создал действительно простой модуль now-or-again и использую существующий lock-lock с его функцией maxPending вместо времени истечения.

Способ, которым я использую эти два модуля, идентичен примерам в READMEs.

Ответ или решение

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

Рекомендованные модули

  1. lock-lock

    • Описание: Этот модуль предоставляет простую и понятную реализацию блокировок, что позволяет избежать одновременного выполнения нескольких долгих функций. "lock-lock" поддерживает функцию maxPending, которая отвечает за управление количеством ожидающих операций. Это может быть полезно в вашем случае, когда необходимо гарантировать, что новая операция не начнётся, пока текущая обновление выполняется.
    • Преимущества:
      • Легко интегрируется в существующий код.
      • Обеспечивает надежное использование блокировок без необходимости ручного управления временем истечения.
      • Управляет количеством операций, которые могут ожидать своей очереди, предотвращая переполнение.
    • Использование: Пример использования из README:

      const Lock = require('lock-lock')(options);
      
      Lock('myLock', (release) => {
       // Ваша долгосрочная операция
       // После завершения вызовите release()
       release();
      });
  2. now-or-again

    • Описание: Замечательный модуль, который позволяет вам спектакулярно управлять функциями, которые должны выполняться немедленно или после завершения текущей задачи. Его использование делает управление очередностью вызовов функций более удобным и предсказуемым.
    • Преимущества:
      • Позволяет избежать конфликтов, когда одна функция должна приостановить выполнение в ожидании завершения другой.
      • Простой и понятный интерфейс, основанный на обратных вызовах.
    • Использование: Пример использования из README:

      const nowOrAgain = require('now-or-again');
      
      const myFunction = nowOrAgain(() => {
       // Ваша логика выполнения
      });
      
      // Вызов myFunction(); будет обрабатывать вызовы как следует.

Итоговое решение

Комбинация вышеупомянутых модулей позволяет вам эффективно управлять блокировками и расписанием обновлений. С использованием lock-lock для управления блокировками и now-or-again для обработки вызовов, ваш код сможет избежать конфликтов и обеспечить надежность работы функций. Это решение не только сократит потенциальные проблемы с конкурирующими изменениями данных, но и упростит управление зависимостями между долгосрочными операциями в вашем приложении.

Заключение

В результате, выбор и внедрение указанных модулей в вашу кодовую базу значительно улучшит управление блокировками и обновлениями в вашем проекте. Поскольку вы уже начали использовать now-or-again и lock-lock, рекомендую протестировать их на небольших сценариях, чтобы убедиться в стабильности и эффективности решения. Использование проверенных модулей из npm с активным сообществом поможет избежать множества проблем, связанных с concurrency и race conditions.

Оцените материал
Добавить комментарий

Капча загружается...