Il modo più efficiente per eseguire 2 mentre i loop


9

Attualmente utilizzo due diversi whileloop per avviare il mio gestore di finestre, dwm e la barra di stato che stampa le informazioni di sistema su di esso.

La mia soluzione al momento è di eseguirli consecutivamente nello stesso script, in questo modo:

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

L'ho anche visto eseguito come un whileciclo nidificato , in questo modo:

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

Il secondo sembra causare picchi di CPU. In termini di efficienza (meno risorse, ecc.) Qual è l'approccio migliore per eseguire questi due loop e perché?

Risposte:


6

Non sono sicuro se sto sottolineando qualcosa di ovvio, ma il primo modo è creare due loop che corrono per sempre, mentre il secondo è creare un loop infinito che crea loop infiniti, quindi finirai con un ever -aumento del numero di loop infiniti. Crea un ciclo infinito, esegue dwm e quindi crea un altro ciclo infinito: il primo ciclo infinito non si è arrestato. Ogni passaggio farà un altro ciclo dwm-status, anche se gli altri sono già in esecuzione ( while trueli manterranno a tempo indeterminato)


Grazie Michael: no, non era ovvio, più che altro un sospetto. Ciò significa che il primo approccio è quello corretto o esiste un modo più efficiente per farlo?
Jasonwryan,

@jasonwryan Beh, non sono sicuro di cosa stai cercando di fare, esattamente. Perché dovresti eseguire il gestore delle finestre più volte? Penserei che potresti solo fare lo sfondo dwmuna volta e poi eseguire dwm-statusin loop
Michael Mrozek

1
Ti permette di riavviare dwm senza chiudere i programmi. Certo, lo uso raramente, ma è comunque utile ... Vedi: wiki.archlinux.org/index.php/… "
jasonwryan,

1
@jasonwryan Wow, è incredibilmente hackish :). Quindi sì, il primo approccio è probabilmente buono. Anche se ora che capisco il secondo modo, dovrebbe essere solo un nuovo ciclo di stato dwm che dovrebbe essere creato ogni volta che uccidi dwm, che presumo non sia così spesso, quindi non sono sicuro che sia effettivamente la causa dei tuoi problemi
Michael Mrozek
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.