В чем разница с буферизованным синхронным вводом / выводом и асинхронным вводом / выводом? - PullRequest
1 голос
/ 03 апреля 2009

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

Так в чем же разница между буферизованным синхронным вводом-выводом и асинхронным вводом-выводом?

Ответы [ 5 ]

3 голосов
/ 03 апреля 2009

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

По крайней мере, так обстоят дела с огромными интеллектуальными дисковыми массивами, с которыми мы имеем дело.

Идея асинхронного ввода-вывода состоит в том, что вы начинаете ввод-вывод и возвращаетесь к другим действиям. Затем, когда ввод-вывод завершен, вы получаете уведомление и можете сделать больше ввода-вывода - другими словами, вы не дожидаетесь его завершения.

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

Async читает, вы просто запускаете процесс, чтобы читать, затем вы уходите и делаете что-то еще, пока это происходит. В результате опроса или прерывания вы позднее обнаружите, что чтение завершено и данные доступны для использования.

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

1 голос
/ 03 апреля 2009

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

Асинхронный ввод-вывод работает на основе обратного вызова: вы передаете функцию обратного вызова, и она вызывается (из другого потока), когда данные становятся доступными.

0 голосов
/ 03 апреля 2009

Смотри здесь. Все, что вы хотите знать, объяснено.

ссылка на википедию

0 голосов
/ 03 апреля 2009

Синхронный ввод-вывод - это «нормальный» тип, в котором вы вызываете подпрограмму, и поток управления продолжается, когда подпрограмма прочитала вашу локальную переменную (игнорируя записи).

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

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

0 голосов
/ 03 апреля 2009

С точки зрения программирования, синхронный ввод-вывод будет обрабатываться в той же функции / процессе, например.

var data0 = synchronousRead();
var data1 = synchronousRead();

тогда как асинхронный ввод-вывод будет обрабатываться обратным вызовом.

asynchronousRead(callBack1);
doOtherStuff();
...

function callBack1(data)
{
    data0 = data;
}
...