Javascript начинался как однопоточный синхронный язык. Язык программирования, который должен работать в одном потоке, означает, что он сможет делать только одну вещь за раз. Выполнение одной задачи за раз потребует соблюдения определенного порядка выполнения. Поэтому он называется синхронным.
В случае синхронного кода Javascript будет выполняться построчно. Вот пример:
1. let a = 5; 2. let b = 10; 3. let c = b/a; 4. print(c)
Каждая строка выполняется одна за другой. Синхронный код также называют блокирующим. Это связано с тем, что строка 2 не может быть выполнена до тех пор, пока не завершится выполнение строки 1. Вы можете не осознавать «блокировку» в этом примере, потому что операции обычно выполняются быстро.
1. let a = 5, b = 10; 2. let result = calculationOverNetwork(a,b) 3. let c = 15, d = 30; 4. let result2 = d/c; 5. print(result2)
В приведенном выше примере строка 2 включает сетевой вызов, выполнение которого занимает две минуты. Пока происходит этот вызов, вы не можете перейти к строке 3, даже если вычислительная мощность вашей машины позволяет выполнять вычисления в это время.
Именно здесь концепция параллелизма становится важной в Javascript. Учитывая, что язык является однопоточным, в отличие от других языков, таких как Java, которые могут использовать несколько потоков для достижения параллелизма, этот любопытный случай параллелизма в JS становится еще более интересным.
Прежде чем мы подробно обсудим параллелизм, давайте попробуем определить некоторые фундаментальные концепции, которые тесно связаны с ним.