При выводе данных с помощью функций print или syswrite в дескриптор файла фактически операция вывода не происходит немедленно. При записи в файл на диске система должна подождать пока головка записи не достигнет нужной дорожки на дисководе и к головке не подойдет нужный сектор, расположенный на вращающейся пластине диска. Эта операция обычно занимает очень мало времени (хотя ее продолжительность может отчетливо ощущаться на лэптопе, поскольку его диск на время простоя компьютера останавливается для. экономии заряда аккумулятора), но другие операции вывода могут потребовать гораздо больше времени, например принтер или плоттер. В частности, весьма значительное время может занять выполнение сетевых операций. Это же относится и к операциям ввода.
Между скоростью вычислений и скоростью ввода-вывода существует принципиальное несоответствие. Программа может пройти по короткому циклу миллион раз в секунду, а на завершение одной операции ввода-вывода иногда требуется несколько/ секунд. Во избежание этого несоответствия в современных операционных системах применяются методы буферизации и блокировки.
Буфер позволяет отделить операции ввода-вывода, выполняемые путем вызова функций в программе, от фактических операций ввода-вывода, выполняемых на аппаратном уровне. Например, при вызове функции print () данные не отправляются прямо на терминал, в сетевой адаптер или на дисковод, а вместо этого результат выполнения этого оператора записывается в виде данных в область памяти. Это происходит быстро, поскольку запись в память не требует много времени. Между тем, в асинхронном режиме операционная система считывает данные, ранее записанные в буфер, и выполняет действия, необходимые для записи этой информации на аппаратное устройство.