Cara paling efisien untuk menjalankan 2 while

9

Saat ini saya menggunakan dua whileloop berbeda untuk memulai window manager, dwm , dan status bar yang mencetak info sistem.

Solusi saya saat ini adalah menjalankannya secara berurutan dalam skrip yang sama, seperti:

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

Saya juga melihatnya berjalan sebagai whileloop bersarang , seperti ini:

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

Yang kedua tampaknya menyebabkan lonjakan CPU. Dalam hal efisiensi (paling tidak memanggil sumber daya dll,), apa pendekatan terbaik untuk menjalankan dua loop ini dan mengapa?

jasonwryan
sumber

Jawaban:

6

Saya tidak yakin apakah saya menunjukkan sesuatu yang jelas, tetapi cara pertama adalah membuat dua loop yang berjalan selamanya, sedangkan yang kedua adalah menciptakan loop tak terbatas yang menciptakan loop tak terbatas, sehingga Anda akan berakhir dengan yang pernah -Meningkatkan jumlah loop tak terbatas. Ini menciptakan infinite loop, menjalankan dwm, dan kemudian membuat loop infinite lain - loop infinite pertama belum berhenti. Setiap pass akan membuat loop status dwm lainnya, meskipun yang lain sudah berjalan ( while trueakan membuat mereka berjalan tanpa batas)

Michael Mrozek
sumber
Terima kasih Michael: tidak, itu tidak jelas, lebih merupakan kecurigaan. Apakah itu berarti pendekatan pertama adalah yang benar, atau apakah ada cara yang lebih efisien untuk melakukannya?
jasonwryan
@jasonwryan Baiklah, saya tidak yakin apa yang Anda coba lakukan, tepatnya. Mengapa Anda perlu menjalankan window manager Anda beberapa kali? Saya akan berpikir Anda hanya bisa latar dwmsekali dan kemudian berjalan dwm-statusdalam satu lingkaran
Michael Mrozek
1
Hal ini memungkinkan Anda untuk me-restart DWM tanpa menutup program. Memang, saya jarang menggunakannya, tetapi tetap berguna ... Lihat: wiki.archlinux.org/index.php/… "
jasonwryan
1
@jasonwryan Wow, itu fantastis sekali :). Maka ya, pendekatan pertama mungkin bagus. Meskipun sekarang saya mengerti cara kedua, seharusnya hanya membuat loop status dwm baru setiap kali Anda membunuh dwm, yang saya asumsikan tidak begitu sering, jadi saya tidak yakin itu sebenarnya penyebab masalah Anda
Michael Mrozek