выполняются в определенном порядке или в рандомном порядке.
Например вот у тебя есть две функции:
async function foo(i) {
await first(i);
await second(i);
}
await Promise.all([
foo(1),
foo(2)
])
в случае синхронной работы у тебя порядок в котором будет выполняться код целиком и полностью зависит от порядка вызова и записи выражений:
- first(1)
- second(1)
- first(2)
- second(2)
Асинхронно наоборот - мы не можем знать заранее в каком порядке будут выполняться операции
- first(1)
- first(2)
- second(2) // потому что раньше успел отработать first2
- second(1) // потому что не успел
То есть мы уже не можем в этом случае предугадать в каком порядке чего будет вызываться, потому нам так важны концепции типа промисов и возможность из них цепочки строить что бы сума не сойти.
Так же есть блокирующие и не блокирующие вызовы.
const data = socket.read(1024)
в этом случае весь поток выполнения будет заблокирован пока клиент тебе пришлет все 1024 байт информации или же пока не закроется коннекшен. И пока это не произойдет никто ничего не выполняет. Процесс по сути в idle
Есть так же понятие паралельных вычислений. Это когда у тебя операции могут во времени пересекаться. Например ты в одном потоке пишешь в файл а в другом читаешь, и эти операции могут накладываться во времени. А что мы знаем про время? что человеческие мозги не умеют процессы разворачивающиеся во времени красиво крутить, потому паралельное вычисление с общей памятью это боль и слезы. И как говорил кто-то (не помню то ли фаулер толи еще кто) - "в мире возмо есть человек 5 которые достаточно квалифицированы что бы работать с тредами и это не я).
> в случае синхронной работы у тебя порядок в котором будет выполняться код целиком и полностью зависит от порядка вызова и записи выражений Можно записать без какого-либо порядка в асинхронном месте, но заюзать мьютексы/семафоры, тем самым заблочив выполнение и сделав код синхронным
Ну смотри, я каждый async могу заменить на отдельный тред, а await на join этого треда. Порядок тоже будет неорпделен. Но это же будет не то, что подразумевают под асинронным программированием?
Обсуждают сегодня