Назад к вопросам
Middle+
3
Возможны ли гонки данных (race conditions) в однопоточном Node.js?
Компании, где спрашивали
Ifellow
Ответ от нейросети
sobes.tech AI
В однопоточном Node.js классические гонки данных, как в многопоточных системах, невозможны, так как весь JavaScript-код выполняется в одном потоке.
Однако гонки данных могут возникать из-за асинхронности и неблокирующего ввода-вывода. Например, если два асинхронных вызова изменяют общий ресурс без должной синхронизации, порядок их выполнения может привести к непредсказуемому состоянию.
Пример:
let counter = 0;
async function increment() {
const current = counter;
await new Promise(resolve => setTimeout(resolve, 10)); // имитация асинхронной операции
counter = current + 1;
}
async function run() {
await Promise.all([increment(), increment()]);
console.log(counter); // может быть 1 вместо 2 из-за гонки
}
run();
Таким образом, гонки данных возможны на уровне асинхронных операций, даже в однопоточном Node.js.