В работе веб-сервиса, да и вообще многих других систем, часто встречается необходимость выполнения различных фоновых задач. Для этого пишут скрипты — воркеры — которые берут список имеющихся задач и начинают их выполнять — с какой-то скоростью и в какой-то последовательности.
Понятное дело, хорошо, когда все задачи выполняются быстро и без проволочек.
Для ускорения выполнения задач желательно решить две проблемы:
- Научить воркер не ждать выполнения каждого отдельного этапа задачи (асинхронность)
- Научить воркер выполнять одновременно несколько задач (многопоточность) (disclaimer: на самом деле термин «многопоточность» тут используется в значении «многопроцессность»)
В этой статье мы рассмотрим вариант реализации воркера, который будет одновременно асинхронным и многопоточным.
Читать полностью »