Подтвердить что ты не робот

Каковы различия между блокировкой с синхронным, неблокирующим и асинхронным?

Я читаю "Концепции операционной системы с Java". Меня совершенно смущает концепция блокировки и синхронности, каковы различия между ними?

4b9b3361

Ответ 1

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

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

Сказав это, вы можете экстраполировать разницу между понятиями: синхронный обычно означает активность, которая должна ждать ответа, прежде чем поток сможет двигаться вперед. Блокировка относится к тому факту, что поток помещается в состояние ожидания (обычно это означает, что он не будет запланирован для выполнения до тех пор, пока не произойдет какое-либо событие). Отсюда можно сделать вывод, что синхронный вызов может включать в себя поведение блокировки или не может, в зависимости от базовой реализации (т.е. Может также вращаться, что означает, что вы имитируете синхронное поведение с асинхронными вызовами).

Ответ 2

синхронно означает, что работа выполняется в потоке, который вызывает функцию, и метод не возвращается до его завершения.

асинхронные методы возвращаются немедленно, потому что другой поток выполняет работу и создает флаг или запускает событие, когда работа выполнена.

Блокировка

означает, что поток, выполняющий событие блокировки, будет ждать, пока событие не произойдет. например, вы пытаетесь прочитать из сокета, и никто не отправляет вам сообщение. блокирующий вызов не вернется, пока сообщение не будет восстановлено из сокета.

ну и неблокирование означает противоположность блокировке, подразумевая, что неблокирующие вызовы асинхронны.

Ответ 3

Я бы классифицировал их следующим образом:

Блокирование - поток будет ждать действия до тех пор, пока не будет успешным или неудачным (подсветка на "будет ждать", отказ обычно является таймаутом)

Synchronous - Thread завершит действие, либо с успехом, либо с ошибкой, до того, как достигнет любой строки после него (выделить на завершение действия)

Non-blocking - Thread не будет ждать завершения действия, немедленно выполняет действие

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