Ответ
Очереди — это структуры данных и архитектурные компоненты, которые организуют обработку задач или сообщений по принципу FIFO (First-In, First-Out — «первым пришёл, первым ушёл»).
Основные цели использования:
- Асинхронная обработка: Отделение момента поступления задачи от момента её выполнения. Например, отправка email не блокирует ответ пользователю.
- Управление нагрузкой (буферизация): Сглаживание пиковых нагрузок. Задачи накапливаются в очереди и обрабатываются по мере возможности.
- Связь между сервисами: В микросервисной архитектуре очереди сообщений (Kafka, RabbitMQ) обеспечивают надёжную коммуникацию между независимыми компонентами.
- Распределение работы: Системы с несколькими воркерами (workers) могут брать задачи из общей очереди, обеспечивая балансировку нагрузки.
Практический пример на Python:
from queue import Queue
import threading
import time
# Создаём очередь
task_queue = Queue()
# Функция-воркер, обрабатывающая задачи
def worker():
while True:
task = task_queue.get() # Блокируется, пока задача не появится
print(f"Обрабатывается: {task}")
time.sleep(1) # Имитация работы
task_queue.task_done() # Сигнал о завершении задачи
# Запускаем воркеры в потоках
for i in range(3):
threading.Thread(target=worker, daemon=True).start()
# Добавляем задачи в очередь
for task in ["Email #1", "Report #2", "Backup #3", "Notification #4"]:
task_queue.put(task)
# Ожидаем завершения обработки всех задач
task_queue.join()
print("Все задачи выполнены.")
Распространённые технологии: RabbitMQ, Apache Kafka, AWS SQS, Celery (для фоновых задач в Python), банальные очереди в памяти или Redis.