Основная причина, по которой я могу использовать асинхронный ввод-вывод, заключается в том, чтобы лучше использовать процессор. Представьте, что у вас есть приложение, которое выполняет какую-то обработку файла. А также давайте предположим, что вы можете обрабатывать данные, содержащиеся в файле, кусками. Если вы не используете асинхронный ввод-вывод, ваше приложение, вероятно, будет вести себя примерно так:
- Считать блок данных. На данный момент загрузка процессора не требуется, поскольку вы заблокированы в ожидании чтения данных.
- обработать данные, которые вы только что прочитали. В этот момент ваше приложение начнет использовать циклы ЦП, поскольку оно обрабатывает данные.
- Если читать больше данных, перейдите к # 1.
Загрузка процессора будет увеличиваться, а затем возрастать до нуля, а затем увеличиваться, а затем до нуля, .... В идеале вы хотите не сидеть сложа руки, если хотите, чтобы ваше приложение работало эффективно и обрабатывало данные максимально быстро. Лучший подход был бы:
- Асинхронное чтение проблемы
- Когда чтение завершается, выдает следующее асинхронное чтение и затем обрабатывает данные
Первый шаг - начальная загрузка. У вас еще нет данных, поэтому вы должны выполнить чтение. С тех пор, когда вы получаете уведомление о завершении чтения, вы выполняете еще одно асинхронное чтение, а затем обрабатываете данные. Преимущество здесь состоит в том, что к тому времени, когда вы закончите обработку фрагмента данных, следующее чтение, вероятно, закончится, так что у вас всегда будут данные для обработки и, следовательно, вы будете более эффективно использовать процессор. Если ваша обработка заканчивается до завершения чтения, вам может потребоваться выполнить несколько асинхронных операций чтения, чтобы у вас было больше данных для обработки.
Ник