Подтвердить что ты не робот

Добавить большой буфер в канал между двумя командами

Для командной строки bash формы

commandA | commandB

Я хочу добавить буфер размером ~ 1 МБ, который находится между commandA и commandB. Я ожидал бы, что смогу сделать это с чем-то вроде формы

commandA | BUFFER | commandB

но какая команда используется для BUFFER?

Примечание. Я хочу сделать это, чтобы разделить две команды, чтобы они лучше распараллеливались. Проблема в том, что commandB обрабатывает данные в больших кусках, что в настоящее время означает, что commandA блокирует до commandB с помощью куска. Итак, все выполняется последовательно: - (

4b9b3361

Ответ 1

BUFFER называется буфером. (буфер 1 человека, возможно, после буфера установки apt-get)

Ответ 2

Вы можете использовать

  • буфер (упомянутый)
  • mbuffer (работает и на соляритах, возможно, в других UNIX)

например.

    process1 | mbuffer -m 1024M | process2

использовать буфер 1G

Ответ 3

Существует еще один инструмент, pv - просмотрщик каналов:

process1 | pv -pterbTCB 1G | process2
  • B указывает размер буфера, здесь 1 Gigibyte
  • C отключает splice, что требуется для B
  • T показывает уровень буфера
  • pterb - это переключатели отображения по умолчанию, необходимые из-за наличия T

pv может быть доступен в системах, где mbuffer/buffer не находится в официальных репозиториях (например, arch linux).

Ответ 4

альтернативно вы можете использовать именованный канал и запускать их параллельно:

mkfifo myfifo
commandB < myfifo &
commandA > myfifo
rm myfifo