Вопрос проверяет понимание разницы между асинхронностью и параллелизмом, что важно для корректного проектирования конкурентных систем и выбора модели исполнения.
Асинхронность и параллелизм часто путают, потому что оба термина описывают работу с несколькими задачами. Но они отвечают на разные вопросы: асинхронность — как не простаивать в ожидании, параллелизм — как выполнять несколько вычислений одновременно.
Асинхронность — это модель, при которой операция запускается и не блокирует поток, пока она не завершится. Поток может переключиться на другую работу, а результат придёт позже через callback, promise или await. Классический пример — сетевой запрос: пока данные идут по сети, CPU может обрабатывать другие задачи.
async function load() {
const a = fetch('/api/a'); // не блокирует поток
const b = fetch('/api/b');
const [ra, rb] = await Promise.all([a, b]);
return [ra, rb];
}
Здесь два запроса выполняются асинхронно, но в одном потоке. Никакого параллельного вычисления нет — есть переключение между задачами во время ожидания I/O.
Параллелизм — это физическое одновременное выполнение нескольких задач, обычно на разных ядрах CPU или в разных потоках. Например, обработка изображений в нескольких worker-потоках или вычисления в Web Workers.
const { Worker } = require('worker_threads');
function runTask(data) {
return new Promise((resolve) => {
const w = new Worker('./task.js', { workerData: data });
w.on('message', resolve);
});
}
Promise.all([runTask(1), runTask(2)]); // реально параллельно
Здесь задачи выполняются одновременно на разных ядрах. Это уже параллелизм, а не просто асинхронность.
Важно понимать, что асинхронность не ускоряет CPU-вычисления. Если задача грузит процессор, асинхронный код в одном потоке всё равно будет её выполнять последовательно. Для реального ускорения вычислений нужен параллелизм.
Итог: асинхронность полезна для I/O-операций и неблокирующего ожидания, а параллелизм — для тяжёлых вычислений и использования нескольких ядер. Выбор зависит от того, чего больше в задаче: ожидания или вычислений.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию