AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

    • Início
    • system&network
    • Ubuntu
    • Unix
    • DBA
    • Computer
    • Coding
    • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 409827
Accepted
Weijun Zhou
Weijun Zhou
Asked: 2017-12-09 13:31:11 +0800 CST2017-12-09 13:31:11 +0800 CST 2017-12-09 13:31:11 +0800 CST

Pipeline como comando paralelo

  • 772

Normalmente, os pipelines no Unix são usados ​​para conectar dois comandos e usar a saída do primeiro comando como entrada do segundo comando. No entanto, recentemente tive a ideia (que pode não ser nova, mas não encontrei muito pesquisando no Google) de usar o pipeline para executar vários comandos em paralelo, como este:

command1 | command2

Isso invocará command1e command2em paralelo se command2não ler da entrada padrão e command1não gravar na saída padrão . Um exemplo mínimo para ilustrar isso é (execute-o em um shell interativo)

ls . -R 1>&2|ls . -R

Minha pergunta é: há alguma desvantagem em usar o pipeline para paralelizar a execução de dois comandos dessa maneira? Existe alguma coisa que eu perdi nessa ideia?

Muito obrigado antecipadamente.

bash parallelism
  • 2 2 respostas
  • 1092 Views

2 respostas

  • Voted
  1. Best Answer
    Andy Dalton
    2017-12-09T13:58:03+08:002017-12-09T13:58:03+08:00

    Os pipelines de comando já são executados em paralelo. Com o comando:

    command1 | command2
    

    Ambos command1e command2são iniciados. Se command2estiver agendado e o pipe estiver vazio, ele bloqueia esperando para ler. Se command1tentar escrever no pipe e ele estiver cheio, command1bloqueie até que haja espaço para escrever. Caso contrário, ambos command1e command2executam em paralelo, gravando e lendo do pipe.

    • 9
  2. xenoid
    2017-12-09T14:45:11+08:002017-12-09T14:45:11+08:00

    Existem pontos negativos...

    1. você não pode ver a saída decommand1
    2. se command2não ler a saída de command1, o último travará depois de gravar uma certa quantidade de saída (eu vi 4K, mas experimentalmente o limite é de cerca de 58K, pelo menos para um processo python, veja abaixo). Isso pode depender do tempo de execução usado pelo command1.
    3. se command2parar antes command1e command1gravar em seu stdout, ele obterá[Errno 32] Broken pipe

    Experimentar:

    cmd1
    #! /usr/bin/python3
    
    import sys,time
    for i in range(64):
        print ("*"*1023,file=sys.stdout)
        print ("cmd1 here (%d)" % i,file=sys.stderr)
        time.sleep(.1)
    print ("cmd1 exiting",file=sys.stderr)
    
    cmd2
    #! /usr/bin/python3
    
    import sys,time
    for i in range(16):
        print ("cmd2 here (%d)" % i,file=sys.stderr)
        time.sleep(1)
    print ("cmd2 exiting",file=sys.stderr)
    

    Corre:

    ./cmd1 | ./cmd2
    

    Você verá:

    • cmd1parando na iteração 58 (porque o cmd2 nunca lê nada de sua saída)
    • cmd1falhando (tubo quebrado) quando o cmd2 sai

    Então sim, talvez possa funcionar. E talvez não.

    • 0

relate perguntas

  • exportar variáveis ​​​​env programaticamente, via stdout do comando [duplicado]

  • Problema estranho ao passar variáveis ​​do arquivo de texto

  • Enquanto a linha lê mantendo os espaços de escape?

  • ordem de substituição de processos `te` e `bash`

  • Execute um script muito lento até que seja bem-sucedido

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Matriz JSON para bash variáveis ​​usando jq

    • 4 respostas
  • Marko Smith

    A data pode formatar a hora atual para o fuso horário GMT? [duplicado]

    • 2 respostas
  • Marko Smith

    bash + lê variáveis ​​e valores do arquivo pelo script bash

    • 4 respostas
  • Marko Smith

    Como posso copiar um diretório e renomeá-lo no mesmo comando?

    • 4 respostas
  • Marko Smith

    conexão ssh. Conexão X11 rejeitada devido a autenticação incorreta

    • 3 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Marko Smith

    comando systemctl não funciona no RHEL 6

    • 3 respostas
  • Marko Smith

    rsync porta 22 e 873 uso

    • 2 respostas
  • Marko Smith

    snap /dev/loop em 100% de utilização -- sem espaço livre

    • 1 respostas
  • Marko Smith

    chave de impressão jq e valor para todos no subobjeto

    • 2 respostas
  • Martin Hope
    EHerman Matriz JSON para bash variáveis ​​usando jq 2017-12-31 14:50:58 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Drux A data pode formatar a hora atual para o fuso horário GMT? [duplicado] 2017-12-26 11:35:07 +0800 CST
  • Martin Hope
    AllisonC Como posso copiar um diretório e renomeá-lo no mesmo comando? 2017-12-22 05:28:06 +0800 CST
  • Martin Hope
    Steve Como as permissões de arquivo funcionam para o usuário "root"? 2017-12-22 02:46:01 +0800 CST
  • Martin Hope
    Bagas Sanjaya Por que o Linux usa LF como caractere de nova linha? 2017-12-20 05:48:21 +0800 CST
  • Martin Hope
    Cbhihe Altere o editor padrão para vim para _ sudo systemctl edit [unit-file] _ 2017-12-03 10:11:38 +0800 CST
  • Martin Hope
    showkey Como baixar o pacote não instalá-lo com o comando apt-get? 2017-12-03 02:15:02 +0800 CST
  • Martin Hope
    youxiao Por que os diretórios /home, /usr, /var, etc. têm o mesmo número de inode (2)? 2017-12-02 05:33:41 +0800 CST
  • Martin Hope
    user223600 gpg — o comando list-keys gera uid [ desconhecido ] depois de importar a chave privada para uma instalação limpa 2017-11-26 18:26:02 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help
subwaysurfers
my femboy roommate

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve