параллелизм в конвейере данных оболочки - PullRequest
0 голосов
/ 26 мая 2018

Итак, я читаю эту статью о том, как команды оболочки могут быть действительно быстрыми и быстрыми, чем кластер hadoop для обработки больших объемов данных.

Я прочитал это вконвейер данных, команды оболочки обрабатываются параллельно.

Я пытался

sleep 3 | echo "Hello world."

Он печатает Hello World и переходит в спящий режим, который выходит через 3 с

Но когда я это сделал,

echo "Hello World" | sleep 2

Он просто заснул.Hello World не был напечатан

Может кто-нибудь объяснить мне, почему это происходит?Если команды выполняются параллельно, разве Hello World не будет напечатан в любом случае?

Ответы [ 2 ]

0 голосов
/ 26 мая 2018

Вертикальная черта, |, между двумя командами называется конвейером.Он сообщает оболочке, что мы хотим использовать вывод команды слева в качестве ввода для команды справа.

В вашем примере sleep ничего не делает с выводом echo.

0 голосов
/ 26 мая 2018

труба (|) предназначена для обработки выходных данных одной команды, которые будут отправлены в качестве входных данных для другой команды, например:

echo "hello there" просто напечатает hello there, но при установке |и добавьте код sed после него, например, -> echo "hello there" | sed "s/hello/hi/", тогда он напечатает hi there, потому что вывод echo работает как стандартный ввод для команды sed.

Итак, в вашем первом случае:

sleep 3 | echo "Hello world."

sleep не отправляет вывод в echo, и он только запускает процесс ожидания в бэкэнде, а стандартный вывод команды echo показывает нам Hello world на экране.

Но в2-й случай: когда echo отправляет стандартный вывод в команду сна в качестве стандартного ввода, я полагаю, что он не принимает его, так как режим сна принимает только параметры (цифровые значения), чтобы сообщить ему, сколько времени нужно, чтобы поставить процесс ожидания вболее того, НЕ предполагается выводить какой-либо стандартный вывод на экран, чтобы там не происходило печатание.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...