← Назад к вопросам

Приведи пример FIFO

2.0 Middle🔥 161 комментариев
#Архитектура систем

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI29 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

FIFO: Примеры и объяснение

FIFO (First In, First Out) — это принцип, при котором первый элемент, добавленный в структуру, будет первым удален. Это очень важная концепция в компьютерных науках и повседневной жизни.

Определение

FIFO буквально означает: тот, кто пришёл первым, уходит первым. Это как очередь в магазине — кто встал первым, тот первым будет обслужен.

Противоположность FIFO — это LIFO (Last In, First Out), когда последний добавленный элемент удаляется первым (как стек тарелок).

Примеры из реальной жизни

1. Очередь в банке

  • Человек А пришёл первым → встал в очередь
  • Человек Б пришёл вторым → встал после А
  • Кассир вызывает сначала человека А (FIFO)
  • Потом человека Б

2. Производство на конвейере

  • Деталь 1 попадает на конвейер первой
  • Деталь 2 попадает второй
  • Деталь 1 обрабатывается и выходит первой
  • Деталь 2 выходит второй

3. Обслуживание клиентов в call-центре

  • Звонок 1 поступил в 10:00
  • Звонок 2 поступил в 10:05
  • Звонок 1 обработается первым (если нет приоритета)
  • Звонок 2 обработается вторым

4. Загрузка пассажиров в самолёт

  • Пассажиры садятся в очередь (boarding pass в порядке)
  • Кто вошёл в самолёт первым, тот выбирает место раньше
  • Кто вошёл последним, ищет среди оставшихся мест

Компьютерные примеры

1. Очередь задач (Task Queue)

Задача 1 → Очередь → Обработка
Задача 2 → Очередь → Обработка
Задача 3 → Очередь → Обработка

Порядок обработки: 1, 2, 3 (FIFO)

2. Message Queue (RabbitMQ, AWS SQS)

PRODUCER:                    QUEUE:              CONSUMER:
- Сообщение 1 → |[1, 2, 3]| → Берёт 1 первым
- Сообщение 2 → |[2, 3]|   → Берёт 2 вторым
- Сообщение 3 → |[3]|      → Берёт 3 третьим

3. Печать документов

  • Пользователь 1 отправил документ на печать
  • Пользователь 2 отправил документ на печать
  • Принтер печатает сначала документ 1, потом документ 2
  • Это FIFO очередь печати

4. Буфер обработки сетевых пакетов

Пакет A (время 10:00:01) → Буфер → Обработка (10:00:02)
Пакет B (время 10:00:02) → Буфер → Обработка (10:00:03)
Пакет C (время 10:00:03) → Буфер → Обработка (10:00:04)

Кодовые примеры

Python: Реализация простой FIFO очереди

from collections import deque

# Создание очереди
queue = deque()

# Добавление элементов (enqueue)
queue.append(1)  # Добавили 1
queue.append(2)  # Добавили 2
queue.append(3)  # Добавили 3

print(queue)  # deque([1, 2, 3])

# Удаление элементов (dequeue) - FIFO
element1 = queue.popleft()  # Получили 1 (первый добавленный)
element2 = queue.popleft()  # Получили 2
element3 = queue.popleft()  # Получили 3

print(element1, element2, element3)  # 1 2 3 - в порядке FIFO

Java: Queue интерфейс

import java.util.Queue;
import java.util.LinkedList;

Queue<Integer> queue = new LinkedList<>();

// Enqueue (добавление)
queue.add(1);
queue.add(2);
queue.add(3);

System.out.println(queue);  // [1, 2, 3]

// Dequeue (удаление) - FIFO
int first = queue.poll();   // Получили 1
int second = queue.poll();  // Получили 2
int third = queue.poll();   // Получили 3

System.out.println(first + " " + second + " " + third);  // 1 2 3

JavaScript: FIFO очередь

// Используем массив как FIFO
const queue = [];

// Enqueue
queue.push(1);  // [1]
queue.push(2);  // [1, 2]
queue.push(3);  // [1, 2, 3]

// Dequeue
const first = queue.shift();   // Получили 1, queue = [2, 3]
const second = queue.shift();  // Получили 2, queue = [3]
const third = queue.shift();   // Получили 3, queue = []

console.log(first, second, third);  // 1 2 3

FIFO в системах обработки сообщений

RabbitMQ — FIFO очередь

1. Producer публикует сообщение в очередь
2. Сообщение встаёт в очередь с timestamp
3. Consumer забирает первое сообщение (FIFO)
4. Consumer обрабатывает его
5. Consumer подтверждает (acknowledge)
6. Следующее сообщение становится первым

AWS SQS — Standard Queue vs FIFO Queue

Standard Queue:
- Нет гарантии FIFO
- Может быть обработано в любом порядке
- Возможна доставка дублей
- Высокая пропускная способность

FIFO Queue:
- Гарантирует FIFO порядок
- Exactly-once обработка
- Нет дублей
- Меньше пропускная способность

FIFO в базах данных

PostgreSQL: Очередь с FIFO

-- Таблица очереди
CREATE TABLE task_queue (
  id SERIAL PRIMARY KEY,
  task TEXT NOT NULL,
  created_at TIMESTAMP DEFAULT NOW(),
  processed BOOLEAN DEFAULT FALSE
);

-- Добавление задачи (enqueue)
INSERT INTO task_queue (task) VALUES ('Task 1');
INSERT INTO task_queue (task) VALUES ('Task 2');

-- Получение первой задачи (dequeue) - FIFO
SELECT id, task FROM task_queue 
WHERE processed = FALSE 
ORDER BY created_at ASC  -- самая старая задача
LIMIT 1;

-- Обработка
UPDATE task_queue SET processed = TRUE WHERE id = 1;

FIFO vs LIFO

FIFO (Queue):

Добавление: 1 → 2 → 3
Удаление:   1 ← 2 ← 3
Порядок: 1, 2, 3

LIFO (Stack):

Добавление: 1 → 2 → 3
Удаление:   3 ← 2 ← 1
Порядок: 3, 2, 1 (обратный)

Когда использовать FIFO

Хорошо для FIFO:

  • Обработка заказов в магазине
  • Очереди печати
  • Обработка запросов к серверу
  • Задачи в очереди обработки
  • Справедливое распределение ресурсов

Плохо для FIFO:

  • Приоритетные задачи (нужна приоритетная очередь)
  • Undo-стеки в редакторах (нужен LIFO)
  • Парсинг выражений (нужен LIFO)

FIFO с приоритетом (Priority Queue)

Иногда нужен гибрид FIFO и приоритета:

Высокий приоритет: [Task A, Task B]
Нормальный приоритет: [Task 1, Task 2, Task 3]
Низкий приоритет: [Task X, Task Y]

Обработка:
1. Task A (высокий, пришла первой)
2. Task B (высокий, пришла второй)
3. Task 1 (нормальный, пришла первой из этой группы)
4. Task 2 (нормальный)
5. Task 3 (нормальный)
6. Task X (низкий)
7. Task Y (низкий)

Итог

FIFO — это фундаментальный принцип очередей:

  • Первый пришёл → первый ушёл
  • Используется везде: от банков до компьютеров
  • В программировании реализуется структурой данных "Queue"
  • Важен для справедливой обработки задач и ресурсов
  • Есть вариации: приоритетные очереди, двусторонние очереди (deque)

Примеры: реальная очередь в магазине, печать документов, обработка сообщений в очереди, задачи в асинхронных системах.

Приведи пример FIFO | PrepBro