Наиболее распространенные вопросы, задаваемые в интервью, недавно - это поле IO. На некоторых из них ответили, в то время как некоторые из них плохо ответили. Недавно я начал узнать больше о некоторых из этих вещей и хочу их суммировать.
Передняя точка
1. Пространство системы пространства пользователя
Система Linux разделит процесс на два пространства, пространство пользователя и системное пространство. Например, наше обычное кодирование - это все пользовательское пространство. Если нам нужно вызовать системные функции, такие как копирование системных файлов, нам нужно вызовать компоненты системы, получить сервисы ядра и полные операции.
Два этапа IO
Процесс выполнения IO разделен на два этапа, ожидая готовых к копированию
Ожидание готово: мы знаем, что когда мы выполняем операции ввода -вывода, данные могут поступать из других приложений или сетей. Если нет данных, операционная система будет ждать этого. В настоящее время приложение также может ждать копирования: скопируйте данные в рабочее пространство приложения
Блокируя и не блокируя, синхронно и асинхронно
Давайте сначала поговорим о синхронизации и асинхронности. Самое простое - увидеть, начинают ли поток или процесс завершить iO. При синхронизации IO система остановится и будет ждать, пока это закончит, прежде чем делать другие вещи. Асинхронный io использует метод мультипотового для запуска нового потока для этого, и вы можете делать другие вещи и ждать уведомления.
Давайте поговорим о блокировке и неблокировании. Эти две вещи фактически сосредоточены на состоянии программы при ожидании результата вызова. Блокировка означает, что когда вы получите этот результат, вы будете вешать, пока не ждете полного результата. Не блокировка означает, что когда процесс не может получить результат, нет блокирующего потока. Это немного запутано. Есть общее объяснение. Если он блокирует, я хочу получить эту вещь. В процессе приобретения я теряю процессор. Я не получу процессор до результата. Однако, если я не блокирую, я буду продолжать держать процессор, и я все еще могу проверить его.
Несколько моделей IO
В настоящее время есть 5 типов
Блокировка io
Самый традиционный тип IO, то есть чтение и написание будет блокировать
Не блокирующий io
Когда пользователь инициирует чтение, он не потеряет процессор, он будет продолжать проверять. Если это не успешно, будет возвращена ошибка. Если он получит успешный сигнал, он инициирует операцию чтения, чтобы получить полный результат.
Мультиплексирование io
Это ядро Java Nio. Там будет поток, управляющий состоянием нескольких розеток, чтобы проверить, готовы ли вы. Только когда вы обнаружите, что вы действительно готовы, вы позвоните в процессор для выполнения операций ввода -вывода. Это более важно
Сигнальный диск io
Используйте меньше, игнорируйте
Асинхронный io
Получите ветку для выполнения