Sobes.tech
Back to questions
Middle+
4

Возможны ли гонки данных (race conditions) в однопоточном Node.js?

Companies where asked
Ifellow

Answer from AI

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.