1

Я думаю, что для команды Linux, конвейер:$ command1 | command2 | command3 будет выполняться с последовательностью команда 1 -> команда 2 -> команда 3.

Но как насчет использования tee:$ command1 | tee >(command2) >(command3)

Так что command2 и command3 имеют один и тот же вход, мой вопрос, будет command2 и command3 выполнять параллельно (многопоточный?) или в последовательности 2-> 3?

Благодарю.

2 ответа2

2

Они будут выполняться параллельно, если смогут. Команда tee будет вводить обе команды по мере их поступления. Это сделает их "готовыми к запуску", если они были заблокированы на входе, а затем ОС планирует их на всех доступных ядрах. Это не многопоточность, потому что это происходит в процессе. Это многопроцессорная операция.

0

Попробуйте запустить эту команду (Ctrl-C через некоторое время):

(od -x /dev/urandom | tee >(sed 's/^/1 /') >(sed 's/^/2 /')) > /tmp/output

/tmp/output будет чередоваться и перезаписываться, поскольку каждый процесс получает возможность запуска.

Также, когда вы говорите "будет выполняться с последовательностью", это неверно. Я думаю, что DOS имитировал конвейеры с временными файлами, но не Unix.

(Я никогда не видел синтаксис>() раньше. Узнавайте что-то новое каждый день!)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .