Буфер

Материал из Неолурк, народный Lurkmore
Перейти к навигации Перейти к поиску

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

Описание[править]

В широком смысле буфер — это любой временный накопитель данных.

Идея буферизации появилась в 1950—1960-х годах вместе с первыми системами пакетной обработки. Ранние компьютеры, такие как IBM 1401 или UNIVAC, имели крайне медленные периферийные устройства (перфоленты, магнитные ленты, принтеры). Чтобы процессор не простаивал в ожидании завершения ввода-вывода, данные сначала собирались в буфер в оперативной памяти, а затем обрабатывались пакетами. За счёт этого компьютеры работали значительно быстрее.

В известной операционной системе UNIX также с самого начала была реализована полноценная буферизация. Стандартная библиотека ввода-вывода имеет автоматическую буферизацию для stdin, stdout и stderr. Иногда она может быть даже избыточной, из-за чего при запуске скрипта скажем вывод может писаться в лог только в конце работы скрипта, отсюда важно корректно писать код.

Сейчас во всех популярных операционных системах ядро поддерживает page cache и buffer cache, где хранятся копии блоков файловой системы. Когда программа вызывает read() или write(), данные обычно не идут сразу на диск, а остаются в буфере. Это резко повышает производительность.

Также имеется всем известный буфер обмена, кусочек ОС, куда сам пользователь может впендюрить произвольный текст или картинку, но только одну. Работа с ним производится посредством всем известных кнопочек Ctrl+C и Ctrl+V.

Применяется буферизация и в сетевых технологиях.

Movax1010h.png Глубокий смысл скрыт в этих неестественных языках
Языки программированияПромышленные: BATC#CC++JavaJavaScript (AJAX) • PascalPerlPHPPythonRubyABAPАссемблерВасикFortran (Профессор)
Эзотерические: BrainFuckHQ9++ErlangForthHaskellLISP (My other car) • PrologTclΤΕΧOracleMySQLGolangВ++ScalaH и Ё+Программист-бетонщик
ПрофессииБыдлокодерПрограммистТестировщикХакерХеллоуворлдщикIT-звёздыПрограммист (существо)Тернарный операторUnreal MCPИсходный кодSingle-Page ApplicationGiteaForgejoCephIDEДжуниорРепозиторийPostgreSQLSQLiteJQueryБуферWebGLПереполнение буфераХардкод
Методы и стилиReverse EngineeringАнти-паттернВыстрелить себе в ногуГрязный хакКод (индусский) • КостыльМетод научного тыкаПомолясьСвистелки и перделкиОчередьСпортивное программированиеОбфускацияБета-тестАльфа-тестШаблоныRegReplaceФреймворкБыдлокодIndex.phpОхота за жукамиКуМирКлеточный автоматПроцедурное программированиеПоиск файлов в Unix по содержимомуPetoohФункция активации нейронаПерегрузка операторов в PythonЗерокодинг
Средства разработкиSublime TextПодсветка синтаксиса кодаUnstable DiffusionAPIPythonTutorCodeWarsDataCampUnity3DКнижный PythonMallocСвязный списокSOLIDООПУказательNULLWeLang++XenonRecompFuse.jsОптимизацияТестированиеAmbreon866Реверс-инжинирингКроссплатформенностьJSON
ЛюдиИлья КанторЮрий КлючевскийЭдуард ЛаасЭдвард СноуденСеймур ПейпертПроблемаK!ockyTypeScriptОтладчикБитЭффективный менеджер (IT)TauriReact NativeWindows APIТипPyTorchTensorFlowПарсерNode.jsFastAPIVue.jsSvelteБэкендElectronBroken Object Level AuthorizationМаппингДжастин ФранкельHex-редакторVisual Basic .NETNext.jsDocker ComposeNode modulesIndexedDB
Прочее++i + ++iДедлайн%s640 килобайтCMSDummy modeЕГГОГFoobarGod is real, unless explicitly declared as integerGOTOIfconfigKISSRegExpSICPsql.ruXyzzyДискетаИнжалид дежицеКОИ-8ЛогМанРекурсияСУБДТест ТьюрингаУмение разбираться в чужом кодеФаза ЛуныФатальный недостатокПроблема 2000ТаймстампКэшЗапись в файл без кэша (Perl)Танцы с бубномКодачХукCurl cffiВибе-кодингFlutterАппликативный оператор