169 похожих чатов

Синхронно vs асинхронно это про то что кусочки твоей программы

выполняются в определенном порядке или в рандомном порядке.

Например вот у тебя есть две функции:

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 которые достаточно квалифицированы что бы работать с тредами и это не я).

2 ответов

13 просмотров

> в случае синхронной работы у тебя порядок в котором будет выполняться код целиком и полностью зависит от порядка вызова и записи выражений Можно записать без какого-либо порядка в асинхронном месте, но заюзать мьютексы/семафоры, тем самым заблочив выполнение и сделав код синхронным

Ну смотри, я каждый async могу заменить на отдельный тред, а await на join этого треда. Порядок тоже будет неорпделен. Но это же будет не то, что подразумевают под асинронным программированием?

Похожие вопросы

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Ребят в СИ можно реализовать ООП?
Николай
33
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Карта сайта