Вопрос проверяет понимание принципов организации очереди задач по принципу FIFO (First In, First Out) и её практической реализации для управления асинхронными операциями.
FIFO-очередь (First In, First Out) — это базовая структура данных, которая моделирует поведение обычной очереди, например, в магазине: тот, кто пришёл первым, обслуживается первым. В программировании такая очередь часто используется для управления задачами, которые должны выполняться в порядке их поступления, особенно в асинхронных сценариях, таких как обработка запросов API, фоновые вычисления или управление потоками данных.
Простейшую очередь можно создать на основе массива, используя методы push (добавление в конец) и shift (удаление из начала). Однако для эффективной работы с большим количеством элементов лучше использовать собственную реализацию на основе связного списка, чтобы избежать затрат на сдвиг индексов при операции shift.
class FIFOQueue {
constructor() {
this.items = [];
}
enqueue(item) {
this.items.push(item);
}
dequeue() {
return this.items.shift();
}
isEmpty() {
return this.items.length === 0;
}
}На практике задачи часто требуют асинхронного выполнения, например, сетевых запросов. Чтобы не перегружать систему, можно реализовать обработчик, который берёт задачи из очереди и выполняет их с ограничением на количество одновременно работающих (concurrency limit).
class AsyncTaskQueue {
constructor(concurrency = 1) {
this.queue = [];
this.concurrency = concurrency;
this.running = 0;
}
addTask(task) {
this.queue.push(task);
this.process();
}
async process() {
while (this.running < this.concurrency && this.queue.length) {
const task = this.queue.shift();
this.running++;
task().finally(() => {
this.running--;
this.process();
});
}
}
}
// Пример использования
const queue = new AsyncTaskQueue(2);
queue.addTask(() => fetch('/api/data1'));
queue.addTask(() => fetch('/api/data2'));Вывод: FIFO-очередь стоит применять, когда необходимо гарантировать порядок обработки задач и контролировать нагрузку на систему, особенно в асинхронных сценариях с ограниченными ресурсами.
Уровень
Рейтинг:
3
Сложность:
4
Навыки
JavaScript
Node.js
Ключевые слова
Подпишись на Python Developer в телеграм