Вопрос проверяет понимание принципов синхронной и асинхронной обработки событий в системах реального времени.
При обработке входящих событий (например, HTTP-запросов, сообщений из очереди или кликов пользователя) важно решить, какие операции выполнять синхронно, а какие — асинхронно. Синхронное выполнение блокирует текущий поток до завершения операции, тогда как асинхронное позволяет продолжить выполнение других задач, пока операция выполняется в фоне. Правильный выбор критичен для производительности и отзывчивости системы.
Синхронно стоит выполнять быстрые операции, которые занимают микросекунды или миллисекунды. Это включает валидацию входных данных, простые преобразования, работу с кэшем в памяти или логирование. Например, проверка формата email или подсчёт суммы заказа не требуют ожидания внешних ресурсов и могут быть выполнены сразу.
// Пример синхронной обработки в Node.js
function validateOrder(order) {
if (!order.items || order.items.length === 0) {
throw new Error('Order must have items');
}
return true;
}
// Вызывается синхронно в обработчике события
app.post('/order', (req, res) => {
try {
validateOrder(req.body);
// Далее асинхронная обработка
saveOrder(req.body).then(() => res.send('OK'));
} catch (err) {
res.status(400).send(err.message);
}
});Асинхронно обрабатывают операции, которые требуют ожидания внешних ресурсов: сетевые запросы, чтение/запись файлов, обращение к базам данных, вызовы сторонних API. Если выполнять их синхронно, поток будет заблокирован на время ожидания, что снижает пропускную способность системы. Асинхронность позволяет параллельно обрабатывать множество событий, используя один поток (в Node.js) или пул потоков (в Java).
// Пример асинхронной обработки в Node.js
async function handleEvent(event) {
// Асинхронный запрос к БД
const user = await db.findUser(event.userId);
// Асинхронный вызов внешнего API
const result = await api.sendNotification(user.email);
return result;
}
// Обработчик события не блокирует event loop
queue.on('message', (msg) => {
handleEvent(msg).catch(console.error);
});Синхронная обработка подходит для быстрых операций, не требующих ожидания, а асинхронная — для всех операций, связанных с вводом-выводом или внешними зависимостями. Правильное разделение позволяет строить масштабируемые и отзывчивые системы, особенно в высоконагруженных сценариях, таких как веб-серверы или обработчики событий.
Уровень
Рейтинг:
4
Сложность:
5
Навыки
JavaScript
Node.js
Ключевые слова
Подпишись на Node.js Developer в телеграм