Что такое блокировка в асинхронном или синхронном режиме? - PullRequest
0 голосов
/ 08 сентября 2018

Я думаю об асинхронности / синхронизации / блокировке / неблокировании при изучении ОС. Я прочитал много статей, но они просто сосредоточены на неблокировании или на том, как асинхронность работает с простой картинкой. Но я хочу знать, что в действительности представляет собой блокировка на более большой картине, включая ЦП, память, ОС, устройство ввода-вывода и т. Д.

Итак, эта картинка - мое предположение.

enter image description here

Я думаю, что блокировка означает, что код моего приложения не обрабатывается ЦП с 1 до 5 . Я прав? И мое понимание блокировки верно?

Ответы [ 3 ]

0 голосов
/ 08 сентября 2018

Ответ не прост, Вам, возможно, придется взглянуть на цикл событий javascript . Поскольку вы используете асинхронный режим, подождите, пока это не означает, что ваше приложение заблокировано, они используются для того, чтобы избежать написания сложных обратных вызовов или цепочек обещаний. Когда вы используете async и ожидаете, javascript добавит эти выполнения по мере необходимости в цикл событий, чтобы избежать выполнения, которое может потребовать, чтобы одно выполнение было выполнено до следующего.

Но в то же время он выполнит другие выполнения, которые не связаны друг с другом, и будет ждать завершения (возможно, рендеринг веб-страницы при поступлении HTTP-ответа).

Таким образом, в целом ваше приложение будет использовать только один поток ЦП. Вся другая магия неблокирования происходит из-за реализации цикла обработки событий, который делает ваше приложение неблокирующим, но не асинхронным (независимо от того, какой процесс javascript всегда является синхронным процессом).

Если вам нужны настоящие асинхронные исполнения на вашем nodejs или javascript. Дочерние процессы и веб-работники могут помочь вам достичь этого.

0 голосов
/ 09 сентября 2018

Лучший способ узнать это - взглянуть на операционную систему, которая имеет синхронные и асинхронные системные службы ввода-вывода. Windoze под одеялом и (лучший пример) VMS такие операционные системы.

В операционной системе VMS SYS $ QIO и SYS $ QIOW выполняют операции ввода-вывода. Две системные службы имеют идентичные параметры. Один из этих параметров (необязательный) - это адрес подпрограммы, вызываемой при завершении операции ввода / вывода (известной как AST), а другой (опция) - это параметр, передаваемый этой подпрограмме.

Если ваше приложение вызывает SYS $ QIO, эта функция возвращается сразу после того, как операции ввода-вывода поставлены в очередь, и приложение может продолжить выполнять другую обработку. Прикладная программа должна полагаться на процедуру обратного вызова, чтобы знать, когда будет выполнен ввод-вывод.

Если ваше приложение вызывает SYS $ QIOW, эта функция ожидает (приостанавливает процесс) до завершения операции ввода-вывода.

Когда такой неблокирующий ввод / вывод доступен как в SYS $ QIO, ваше приложение может устанавливать циклы асинхронных операций. Допустим, ваше приложение хочет обрабатывать произвольное количество сетевых подключений, куда данные могут входить в любое время. Для каждого соединения вы вызываете SYS $ QIO для чтения из соединения. Ваш процесс не ждет, поэтому он может сделать это для любого количества соединений. Когда поступают данные, вызывается функция AST, и вы снова вызываете SYS $ QIO (предоставляя ту же функцию, что и AST) для следующего чтения.

Используя этот метод, одна программа может обрабатывать сотни (как это позволяют системные параметры) сетевых подключений.

0 голосов
/ 08 сентября 2018

Ваше приложение остановится на синхронном запросе (что бы оно ни делало) и дождется его завершения.

PRO: на следующей строке в вашем приложении вы можете полагать, что этот запрос синхронизации сделал то, что делал

CONTRA: ваше приложение просто сидит и ждет. заблокировано .

Ваше приложение не остановится на асинхронном запросе (что бы он ни делал).

PRO: приложение продолжит работать. не заблокировано

CONTRA: если вам нужно знать, когда запрос завершен и каков его результат, вам нужно проявить особую осторожность, чтобы получить результат (используя обратные вызовы или события или обещания или любую технологию, используемую в вашей технологической среде)

...