Как использовать параллельную очередь задач в ваших Redux-Sagas

1656617169 kak ispolzovat parallelnuyu ochered zadach v vashih redux sagas

автор Shy Alter

1*8HhqBBy6h6Ag7wO_mqCMug

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

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

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

TL;DR внизу

Начнем с основ

Что такое очередь? ???‍

Очередь – это линейная структура, в которой значения добавляются с одного конца и удаляются с другого. Эта дисциплина порождает поведение «первым пришедшим/первым вышедшим» (FIFO), что является определяющим признаком очередей. Две основные операции очереди: enqueue (прибавить к задней части) и dequeue (удалить из начала) (источник).

1*Li-9xbwJWffXSSERtTX86g
Представление очереди FIFO (первый пришел, первый вышел) (википедия)

Хорошо, когда мы его использовать?

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

Прекрасно, вы меня убедили! Но зачем мне нужна параллельность?

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

Рассмотрим следующий случай ?:

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

1*R4Dvy6CM9tbCiALKvVrshA
(@andreagiuliaderba)

На помощь приходит черед одновременных задач! ?

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

1*nidy8yr16nMUBA153rhwEQ
одна одновременная очередь (@andreagiuliaderba)

Ура! ?

Теперь давайте рассмотрим вариант использования

На прошлой неделе я работал над расширением Google Chrome, которое нюхает и загружает потоки HLS (HTTP Live stream).

Потоки HLS объединяются из нескольких фрагментов, которые извлекаются один за другим и передаются в ваш браузер как одно видео. Вы можете иметь тысячи файлов на поток, и вам нужно скачать их все.

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

TL; DR: вот код

Теперь давайте рассмотрим это по частям.

1. Обработчик

Этот простой обработчик получает URI из полезной нагрузки, а затем:

  • получает кусок
  • превращает его в каплю
  • излучает а кусок готов событие redux
  • получает текущее количество готовых кусков
  • проверяет, есть ли «готово»

2. Создайте очередь

Используя обработчик, мы создаем новую очередь из 5 рабочих. Мы возвращаем наблюдатель задача и а канал очереди. Затем мы собираемся запустить (форк) задачу наблюдателя, чтобы она начала прослушивать задание.

3. Нажмите на задание

Мы отображаем все сегменты в поставленную задачу (в канал очереди что мы вернулись), а затем выполняем все задания вместе.

4. Подождите, пока все куски будут готовы или действие будет отменено

Теперь ждем вызова первого действия готово или быть отменен. После этого мы можем отменить наблюдатель и действовать в соответствии с полученным действием.

И все это!

Если вы хотите увидеть это в прямом эфире, посетите и загрузите расширение Chrome.

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

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

Ваш адрес email не будет опубликован.