Как память управляется в stdout?

Вот пример того, как восстановить дамп postgres из s3:

wget -O - 'https://s3.amazonaws.com/database.dump' | pg_restore -h somedomain.us-east-1.rds.amazonaws.com -p 5432 -d databasename -U username

Но каково ожидаемое поведение, если файл слишком большой? Скажите 1 ТБ. Как синхронизируются wget и pg_restore? Например, когда wget читает быстрее, чем pg_restore потребляет?


person Cherry    schedule 09.12.2019    source источник
comment
Процесс записи должен (и будет автоматически с блокирующей записью) ждать, пока в канале снова появится место для записи, подобно тому как процесс чтения должен ждать, пока не появится что-то для чтения. На самом деле это может быть средством приостановить процесс: не позволять читать конец чтения, например нажав ctrl-s в терминале. Размеры буфера трубы обсуждаются здесь.   -  person Peter - Reinstate Monica    schedule 09.12.2019
comment
Данные передаются в потоковом режиме, и я почти уверен, что это связано с размерами блоков ввода-вывода или размерами страниц памяти, но я давно задавался вопросом о деталях этого. Хороший вопрос.   -  person virullius    schedule 09.12.2019
comment
Ответили здесь: stackoverflow.com/questions/19122/bash-pipe-handling с этой ссылкой: en.wikipedia.org/wiki/Pipeline_ (Unix) #Implementation (но не очень подробно)   -  person virullius    schedule 09.12.2019
comment
Отвечает ли это на ваш вопрос? Обработка каналов Bash   -  person Romeo Ninov    schedule 10.12.2019