объясни worker --простыми-словами

Worker
Кто-то загружает фото на 40 МБ на твой сайт. Если приложение остановит все, чтобы прямо сейчас изменить его размер, следующие десять человек будут просто смотреть на крутящийся индикатор. Поэтому ты не заставляешь их ждать. Ты перекидываешь задачу через стену и говоришь: "разберись с этим, у меня клиенты".
Штука по ту сторону стены — это worker.
Представь повара на линии в загруженной кухне. Он не принимает твой заказ, не наливает вино и не пробивает оплату. Он берет один талон с рейки, готовит одно блюдо, отдает его и тянется за следующим талоном. Это вся работа. Worker — такой повар в софте. Маленькая программа с одной задачей, которая тихо работает на фоне, в стороне от главного зала, где сидят клиенты.
Вот часть, после которой щелкает. Большая часть того, что делает приложение, происходит прямо перед тобой и быстро: нажал кнопку, увидел результат. Но некоторые задачи слишком медленные, тяжелые или муторные, чтобы заставлять человека сидеть и ждать. Поэтому приложение передает их worker'у, чтобы тот разобрался с ними в фоне, пока ты идешь дальше. Задачи, которые туда передают, почти всегда одного вкуса:
- Уменьшить и обрезать огромную картинку, которую только что загрузили
- Отправить приветственное письмо (и следующее, и еще следующее)
- Сгенерировать месячный PDF-отчет, которого никто не хочет ждать
- Перемолоть большую пачку заказов в сводку
- Обработать видео, файл, импорт
За всем этим тебе не нужно наблюдать. Поэтому оно делается вне поля зрения, а экран сразу возвращается к тебе.
Теперь фокус, и это вся причина существования workers. Когда во время ужина заказы копятся, хорошая кухня не переписывает меню и не переучивает шефа. Она просто добавляет поваров на линию. Пять талонов висят в очереди? Поставь пять поваров. В софте ровно тот же ход. Когда работы резко становится много, ты ничего не перестраиваешь. Ты запускаешь больше копий одного и того же маленького worker'а рядом, и каждый берет талоны с той же рейки.
Вот почему это важно, даже если ты никогда не трогаешь код:
- Поэтому приложения кажутся быстрыми, даже когда делают что-то медленное. Тяжелую работу отправили worker'у на задний план, поэтому фронт зала не замерзает.
- Так все масштабируется в загруженный день. Поток регистраций или загрузок не ломает приложение. Оно просто поднимает больше поваров.
- Так скучные штуки происходят сами. Большая часть автоматизации "поставил и забыл" — это worker, который тихо берет талоны, пока ты спишь.
Worker обычно кормится из линии талонов, которые ждут своей очереди (у этой линии есть свое имя — очередь, и она заслуживает отдельной статьи). Worker берет первый, делает его, берет следующий. Если линия длинная — добавляешь поваров. Если тихо — повара стоят без дела, и это нормально, для этого они там и есть.
Одна честная заметка, чтобы ты не представлял это неправильно: worker не работает вечно, просто ожидая рядом. Вся идея в том, что он просыпается, делает одну задачу, которую ему дали, отчитывается и уходит с дороги. Дешевый, сфокусированный, одноразовый. Нужно сто сразу? Подними сто. Не нужно ни одного? Не запускай ни одного.
Ты не собираешь машину, которая делает все. Ты собираешь одного маленького повара, который хорошо делает одну вещь, а потом нанимаешь столько таких, сколько требует наплыв.