Najbardziej wydajny sposób na uruchomienie 2 pętli while

9

Obecnie używam dwóch różnych whilepętli, aby uruchomić menedżera okien, dwm i pasek stanu, który drukuje na nim informacje o systemie.

Obecnie moim rozwiązaniem jest uruchamianie ich kolejno w tym samym skrypcie, na przykład:

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

Widziałem też , jak działa jako zagnieżdżona whilepętla, jak poniżej:

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

Drugi wydaje się powodować wzrosty procesora. Pod względem wydajności (najmniejsze zapotrzebowanie na zasoby itp.), Jakie jest najlepsze podejście do uruchomienia tych dwóch pętli i dlaczego?

jasonwryan
źródło

Odpowiedzi:

6

Nie jestem pewien, czy wskazuję coś oczywistego, ale pierwszym sposobem jest utworzenie dwóch pętli, które działają wiecznie, podczas gdy drugim jest tworzenie nieskończonej pętli, która tworzy nieskończone pętle, więc skończysz na zawsze - wzrost liczby nieskończonych pętli. Tworzy nieskończoną pętlę, uruchamia dwm, a następnie tworzy kolejną nieskończoną pętlę - pierwsza nieskończona pętla się nie zatrzymała. Każde przejście tworzy kolejną pętlę statusu dwm, nawet jeśli inne są już uruchomione ( while trueutrzymają ich działanie przez czas nieokreślony)

Michał Mrożek
źródło
Dzięki Michael: nie, to nie było oczywiste, bardziej podejrzenie. Czy to oznacza, że ​​pierwsze podejście jest prawidłowe, czy jest bardziej skuteczny sposób?
jasonwryan
@ jasonwryan Cóż, nie jestem pewien, co dokładnie próbujesz zrobić. Dlaczego musiałbyś uruchamiać menedżera okien wiele razy? Wydaje mi się, że możesz po prostu dwmraz w tle, a potem biegać dwm-statusw pętli
Michael Mrozek
1
Pozwala zrestartować dwm bez zamykania programów. Wprawdzie używam go rzadko, ale mimo to jest przydatny ... Zobacz: wiki.archlinux.org/index.php/… "
jasonwryan
1
@ jasonwryan Wow, to fantastycznie hackish :). Zatem tak, pierwsze podejście jest prawdopodobnie dobre. Chociaż teraz, gdy rozumiem drugi sposób, powinno się tworzyć nową pętlę statusu dwm za każdym razem, gdy zabijasz dwm, co, jak zakładam, nie jest tak częste, więc nie jestem pewien, czy to w rzeczywistości przyczyną twoich problemów
Michael Mrozek