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

Java

предисловие

В некоторых недавних интервью я говорил на тему «синхронный/асинхронный, блокирующий/неблокирующий», связанный с кандидатом, и обнаружил, что все относительно размыты, и даже одноклассники спросят: «Это не одно и то же? ". Так что через такой шанс, я хочу максимально использовать несколько простых примеров, попытаться рассказать об этих понятиях.

текст

В этой статье делается попытка объяснить эти концепции на примере Лао Вана, «ожидающего автобус».

синхронная блокировка

После праздника Лао Ван вернулся в деревню.Из-за плохой инфраструктуры в сельской местности, когда он ждал на вокзале, он мог только дождаться прибытия автобуса.

В это время для автобуса (вызываемый абонент), Это "Синхронизировать"Да. Старый Ван (абонент) на автобусе (вызываемый абонент)"блокировать«На платформе.

Асинхронная блокировка

После праздника Фараон вернулся в большой город и принялся за работу.Он тоже ждал на вокзале и ждал на вокзале.Однако инфраструктура в большом городе лучше.Когда автобус приедет на вокзал, будет трансляция напоминания.пассажир.

Потом на автобус(вызываемый абонент), это "асинхронный"После станции сообщит звонивший, но на этот раз Фараон (абонент) или на автобусе (вызываемый абонент)"блокировать"На платформе.

Синхронный неблокирующий

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

Потом на автобус(вызываемый абонент), это "Синхронизировать"Да. Но в это время фараон (абонент) Можно делать покупки и заниматься другими делами, пока ждете автобус, так он и есть».неблокирующий"из.

Асинхронный неблокирующий

Весенний ветер реформ веет по всей земле, и строительство новой сельской местности идет полным ходом.В это время в сельской местности автобус также установил напоминание о прибытии транспортного средства. Теперь, когда Лао Ван ждет автобус, он может спокойно вспоминать о Сяохуа.Когда он слышит объявление о прибытии машины, которую ему нужно взять, он идет на станцию, чтобы сесть в автобус.

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

Резюме концепции

Из приведенного выше примера мы можем понять одно, синхронные асинхронные, блокирующие, не блокирующие их.Целевые объекты разные. Для вызывающего объекта он бывает блокирующим и неблокирующим, а вызываемый — синхронным и асинхронным.

Синхронизация: A вызывает B и возвращается только тогда, когда B получает результат.
Асинхронный: A вызывает B, и B немедленно возвращается без ожидания. Когда B завершит обработку, он сообщит результат A посредством уведомления или функции обратного вызова.
Блокировка: A звонит B, A будет приостановлен, ожидая результата B, и ничего нельзя сделать.
Неблокирующий: A вызывает B, и он приостанавливается, чтобы дождаться результата B, и может делать другие вещи.

Связанные концепции в Java

Модель IO в Java, есть три, а именно био (синхронная блокировка IO), Nio (синхронный неблокирующий IO), AiO (асинхронный неблокирующий IO). На этот раз мы найдем, блокируя асинхронную модель не существует.

Появление NIO и AIO решило многие проблемы, возникающие при использовании BIO, поэтому, когда мы выбираем, какой IO использовать, нам нужно принимать решения, исходя из бизнес-сценариев.Нет необходимости слепо следовать NIO и AIO, которые не только увеличивает сложность кодирования Это также увеличивает вероятность ошибок, а появление технологий позволяет лучше решать проблемы.

Эпилог

В этой статье мы в основном хотим описать значение и различие этих концепций с помощью знакомых сценариев.Если вы хотите углубиться, вы можете перейти к соответствующей информации о модели ввода-вывода Linux.API ввода-вывода Java также основан на этих базовых моделях.


Рекомендуемое чтение

"Лучшие практики обработки исключений Java и предотвращение ошибок
"О нескольких позах и способах самоспасения при взрыве JVM
"Принцип распределенного замка Zookeeper, понятный подружкам
"Освобождение программистов из рук Супервайзера

Если у тебя что-то получится, поставь лайк

Обратите внимание на «Программу обезьяны посреди ночи» и поделитесь лучшими галантерейными товарами