Не удается кросс-компилировать SDL2 с Mingw-w64 в Ubuntu

Вы частично правы, но только случайно .

В вашем примере все данные действительно должны быть прочитаны «между» каналами, но они не обязательно должны находиться в памяти (, включая виртуальную память ). Обычные реализации sortмогут сортировать наборы данных, которые не помещаются в ОЗУ, путем частичной сортировки временных файлов и слияния. Однако фактом является то, что вы не можете вывести отсортированную последовательность, не прочитав каждый элемент. Это довольно очевидно. Так что да, sortможет начать вывод во второй канал только после того, как прочитает (и сделает что-то еще, возможно, частично отсортировав временные файлы )все, начиная с первого. Но не обязательно хранить все это в оперативной памяти.

Однако это не имеет ничего общего с тем, как работают трубы. Каналы могут быть названы (, традиционно они все назывались ), что означает не более и не менее того, что они имеют место в файловой системе, как и файлы. И это именно то, чем когда-то были каналы, файлы (с записями объединялись настолько, насколько позволяла доступность физической памяти, в качестве оптимизации ).

В настоящее время каналы представляют собой небольшой буфер ядра конечного -размера, в который копируются данные, по крайней мере, это то, что концептуально происходит. Если ядро ​​может помочь, копии удаляются, играя с виртуальной машиной (. Например, конвейерная передача из файла обычно просто делает ту же страницу доступной для чтения другим процессом, так что, в конце концов, это только операция чтения, а не две копии. и никакой дополнительной памяти, кроме уже используемой буферным кешем, в любом случае не требуется. В некоторых ситуациях вы также можете получить 100% нулевую -копию. Или что-то очень близкое.

Если каналы малы и имеют конечный -размер, то как это может работать для любого неизвестного (возможно большого )объема данных? Это просто :Когда больше ничего не помещается, запись блокируется до тех пор, пока снова не освободится место.

Философия множества простых программ была наиболее полезна когда-то, когда памяти было очень мало. Потому что, ну, вы могли бы выполнять работу маленькими шагами, один за другим. В настоящее время преимущества, кроме некоторой дополнительной гибкости, я осмелюсь сказать, уже не так велики.
Однако пайпы реализованы очень эффективно (они должны были быть! ), так что недостатка тоже нет, это устоявшаяся вещь, которая отлично работает и к которой люди привыкли, так что нет необходимости менять парадигму.

0
10.06.2020, 17:38
0 ответов

Теги

Похожие вопросы