Maneira mais eficiente de executar 2 loops


9

Atualmente, uso dois whileloops diferentes para iniciar meu gerenciador de janelas, dwm , e a barra de status que imprime as informações do sistema nele.

Minha solução no momento é executá-los consecutivamente no mesmo script, assim:

while true; do
        $HOME/Scripts/dwm-status
        sleep 2s
    done &
while true; do
    dwm >/dev/null
done

Eu também vi como um whileloop aninhado , assim:

while true; do
        while true; do
            $HOME/Scripts/dwm-status
            sleep 2s
        done &
        dwm >/dev/null
    done

O segundo parece causar picos de CPU. Em termos de eficiência (menos recurso, etc.), qual é a melhor abordagem para executar esses dois loops e por quê?

Respostas:


6

Não sei se estou apontando algo óbvio, mas a primeira maneira é criar dois loops que duram para sempre, enquanto o segundo é criar um loop infinito que cria loops infinitos, então você acabará com um loop sempre aumento do número de loops infinitos. Ele cria um loop infinito, executa o dwm e cria outro loop infinito - o primeiro loop infinito não parou. Cada passagem criará outro loop dwm-status, mesmo que os outros já estejam em execução ( while trueos manterá em execução indefinidamente)


Obrigado Michael: não, não era óbvio, mais uma suspeita. Isso significa que a primeira abordagem é a correta ou existe uma maneira mais eficiente de fazer isso?
jasonwryan

@jasonwryan Bem, não sei exatamente o que você está tentando fazer. Por que você precisaria executar seu gerenciador de janelas várias vezes? Eu acho que você poderia apenas fundo dwmuma vez e, em seguida, executar dwm-statusem um loop
Michael Mrozek

1
Ele permite que você reinicie o dwm sem fechar os programas. É certo que eu uso-o com pouca frequência, mas, mesmo assim, é útil ... Veja: wiki.archlinux.org/index.php/… "
jasonwryan

1
@jasonwryan Uau, isso é extraordinariamente hackish :). Então sim, a primeira abordagem provavelmente é boa. Embora agora que compreenda a segunda maneira, ele só deva criar um novo loop de status dwm toda vez que você mata o dwm, o que suponho que não seja tão frequente, por isso não tenho certeza de que é realmente a causa dos seus problemas
Michael Mrozek
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.