В высокопроизводительной конструкции системы ввода-вывода существуют несколько существительных концепций, которые часто смущает нас. Детали следующие:
1 Что такое синхронизация?
2 Что такое асинхронное?
3 Что такое блокировка?
4 Что не блокирует?
5 Что такое синхронная блокировка?
6 Что такое синхронное неблокирование?
7 Что такое асинхронное блокирование?
8 Что такое асинхронное неблокирование?
Позвольте мне привести вам пример в жизни:
Если вы хотите куриный рисовой кости курицы курицы:
Синхронная блокировка: вы идете в ресторан, чтобы заказать еду, затем подождите там и кричите: ОК?
Синхронное неблокирование: после заказа в ресторане я пошел, чтобы прогуляться по собаке. Но после прогулки на некоторое время он вернулся в ресторан и закричал: ОК?
Асинхронная блокировка: при прогулке с собакой мне позвонили из ресторана, сказав, что еда была готова, и попросила вас получить ее лично.
Асинхронный неблокирующий: ресторан позвонил и сказал: «Мы знаем ваше местоположение, и я отправлю его вам позже, чтобы я смогу пройти собаку с душевным спокойствием».
Прежде чем мы выясним вышеупомянутые проблемы, мы должны сначала понять, что такое синхронизация, асинхронная, блокировка и не блокировка. Только когда эти единственные понятия понятны четко, а затем в сочетании, это будет относительно проще.
1. Синхронизация и асинхроность предназначены для взаимодействия между применением и ядром.
2. Блокировка и неблокировка-это различные методы, принятые процессом при доступе к данным в соответствии с состоянием готовой операции. По словам, это метод реализации функций чтения или написания операций. В соответствии с методом блокировки функция чтения или записи будет ждать, а не функция чтения или записи немедленно вернет значение состояния.
Из приведенного выше описания мы можем в основном суммировать короткое предложение: синхронизация и асинхронность являются целью, а блокирование и неблокировка являются методами реализации.
1. Синхронизация: относится к пользовательскому процессу, запускающему операцию ввода -вывода и ожидание или опрос, чтобы проверить, готова ли операция IO. Я вышел, чтобы купить одежду на улице и сделал это сам, и я не мог ничего сделать.
2. Асинхронно: асинхронно означает, что после того, как пользовательский процесс запускает операцию ввода -вывода, он начинает делать свои вещи. Когда операция IO будет завершена, она будет уведомлена об завершении IO (характеристикой асинхронного является уведомление). Скажите своему другу, чтобы он соответствовал размеру, размеру и цвету одежды, и позвольте вашему другу поручить его продавать, а затем вы можете делать другие вещи. (При использовании асинхронного ввода -вывода Java делегаты ввода -вводы, чтение и написание в ОС, и необходимо передать адрес и размер буфера данных в ОС)
3. Блокировка: так называемый метод блокировки означает, что при попытке прочитать и написать дескриптор файла, если нечего читать или он временно неписана, программа войдет в состояние ожидания, пока что-то для прочтения или записи, и отправится на автобусную остановку, чтобы перезарядиться. В настоящее время зано же нет (может быть, он пошел в туалет), а затем мы ждем здесь, пока не вернется перезарядка. (Конечно, это не тот случай в реальном обществе, но это действительно так на компьютерах.)
4. Не блокировка: в неблокирующем состоянии, если нечего читать или не может быть написана, функция чтения и записи вернется немедленно, не ожидая. Когда банк снимает деньги, чтобы справиться с бизнесом, мы получим небольшую квитанцию. После того, как мы получим его, мы можем поиграть с нашими мобильными телефонами или пообщаться с другими. Когда мы поворачиваемся, спикер банка уведомит нас, и мы можем пойти.
Операция ввода -вывода фактически делится на два шага: инициирование запроса IO и фактической операции ввода -вывода.
Разница между синхронным IO и асинхронным IO заключается в том, является ли второй шаг заблокирован. Если фактический в io прочитать и записать процесс запроса, то это синхронно io.
Разница между блокированием ввода-вывода и неблокирующего ввода-вывода находится на первом шаге, будет ли запрос IO заблокирован. Если он заблокирован до его завершения, это традиционная блокировка ввода. Если он не заблокирован, это не блокирующий io.
Синхронизация и асинхронные направлены на взаимодействие между применением и ядром. Синхронизация относится к пользовательскому процессу, запускающему операции ввода -вывода и ожидание или опрос, чтобы увидеть, готова ли операция IO. Асинхронный означает, что пользовательский процесс начинает делать свои собственные вещи после запуска операции ввода -вывода, и после завершения операции IO будет уведомлено, что завершение IO будет завершено.
Блокировка и неблокирование-это различные методы, принятые процессом при доступе к данным в соответствии с состоянием готового состояния ввода-вывода. По словам, это метод реализации функций чтения или написания операций. В соответствии с методом блокировки функция чтения или записи будет ждать, а не функция чтения или записи немедленно вернет значение состояния.
Следовательно, операции ввода-вывода можно разделить на три категории: синхронное блокирование (то есть ранние операции био), синхронное неблокирование (NIO) и асинхронное неблокирование (AIO).
Синхронная блокировка (био):
Таким образом, после того, как пользовательский процесс инициирует операцию ввода -вывода, он должен ждать выполнения операции IO. Только после того, как операция iO действительно завершена, может запустить пользовательский процесс. Традиционная модель ввода -вывода Java принадлежит этому методу.
Синхронное неблокирование (NIO):
Таким образом, пользовательский процесс может вернуться, чтобы делать другие вещи после запуска операции ввода -вывода, но пользовательский процесс должен спросить, будет ли операция ввода времени готова время от времени, что требует постоянного запроса пользователя, тем самым представляя ненужные отходы ресурсов ЦП. Среди них в настоящее время Java's Nio является синхронным неблокирующим вводом-выводом.
Асинхронный неблокирующий (AIO):
Таким образом, после того, как приложение инициирует операцию ввода -вывода, оно не ждет выполнения операции ввода ядра, и уведомит приложение после того, как ядро завершит операцию IO.
Синхронное блокирование io (Java Bio):
Синхронизировать и блокировать, режим реализации сервера должен подключаться к одному потоку, то есть, когда у клиента есть запрос на соединение, сервер должен запустить поток для обработки. Если это соединение ничего не сделает, оно приведет к ненужным накладным расходам, и, конечно, оно может быть улучшено с помощью механизма пула потоков.
Синхронно неблокирующий io (java nio):
Синхронное неблокирование, режим реализации сервера-запросить один поток, то есть запросы на подключение, отправленные клиентом, будут зарегистрированы в мультиплексоре. Мультиплексор оправляет соединение с запросом ввода/вывода и запускает поток для обработки. Пользовательский процесс также должен спросить, будет ли операция ввода времени готова время от времени, что требует, чтобы пользовательский процесс постоянно спрашивал.
Асинхронная блокировка io (java nio):
Таким образом, после того, как приложение инициирует операцию ввода -вывода, оно не ждет выполнения операции ввода ядра, и уведомит приложение после того, как ядро завершит операцию IO. Это на самом деле наиболее критическое различие между синхронизацией и асинхронной. Синхронизация должна ждать или активно спросить, завершен ли IO. Так почему это заблокировано? Поскольку в настоящее время это делается с помощью Select System Calls, и реализация самой функции Select блокирует, и одним из преимуществ использования функции Select является то, что она может прослушать несколько ручек файлов одновременно (если с точки зрения UNP, Select - это синхронная операция. Поскольку после выбора процесс также необходимо для чтения и записи данных), тем самым улучшая согласованность системы!
(Java aio (nio.2)) асинхронный неблокирующий io:
В этом режиме пользовательский процесс должен только инициировать операцию ввода -вывода и немедленно возвращать. После того, как операция IO действительно завершена, приложение будет уведомлено о том, что операция ввода -вывода завершена. В настоящее время пользовательскому процессу необходимо только обрабатывать данные, и ему не нужно выполнять фактические операции ввода и записи, потому что реальные операции чтения или записи ввода -вывода были завершены ядром.
Анализ применимых сценариев для Bio, Nio и AIO:
Био метод подходит для архитектур с относительно небольшими соединениями и фиксированными соединениями. Этот метод требует высоких ресурсов сервера, а параллелизм ограничивается приложениями. Это единственный выбор перед JDK1.4, но программа интуитивно понятна, простая и простая для понимания.
Метод NIO подходит для архитектур с большим количеством соединений и относительно короткими соединениями (работа света), таких как серверы чата. Параллелизм ограничивается приложениями и имеет относительно сложное программирование. JDK1.4 начал поддерживать его.
Метод AIO используется для архитектур с большим количеством соединений и относительно длинным соединением (повторная операция), например, серверы альбомов, которые полностью вызывают ОС для участия в одновременных операциях, и программирование относительно сложное. JDK7 начал поддерживать его.
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.