Cách hiệu quả nhất để chạy 2 vòng lặp trong khi


9

Hiện tại tôi sử dụng hai whilevòng lặp khác nhau để khởi động trình quản lý cửa sổ của mình, dwm và thanh trạng thái in thông tin hệ thống cho nó.

Giải pháp của tôi tại thời điểm này là chạy chúng liên tiếp trong cùng một kịch bản, như vậy:

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

Tôi cũng đã thấy nó chạy như một whilevòng lặp lồng nhau , như thế này:

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

Thứ hai dường như gây ra đột biến CPU. Về mặt hiệu quả (ít nhất là kêu gọi tài nguyên, v.v.), cách tiếp cận tốt nhất để chạy hai vòng này là gì và tại sao?

Câu trả lời:


6

Tôi không chắc chắn nếu tôi chỉ ra một cái gì đó rõ ràng, nhưng cách đầu tiên là tạo ra hai vòng lặp chạy mãi mãi, trong khi cách thứ hai là tạo một vòng lặp vô hạn tạo ra các vòng lặp vô hạn, vì vậy bạn sẽ kết thúc với một vòng lặp - tăng số vòng lặp vô hạn. Nó tạo ra một vòng lặp vô hạn, chạy dwm và sau đó tạo ra một vòng lặp vô hạn khác - vòng lặp vô hạn đầu tiên chưa dừng lại. Mỗi lượt đi sẽ tạo một vòng lặp trạng thái dwm khác, mặc dù các vòng lặp khác đã chạy ( while truesẽ giữ cho chúng chạy vô thời hạn)


Cảm ơn Michael: không, nó không rõ ràng, nhiều nghi ngờ. Điều đó có nghĩa là cách tiếp cận đầu tiên là cách tiếp cận đúng, hay có cách nào hiệu quả hơn để làm điều đó?
jasonwryan

@jasonwryan Chà, chính xác thì tôi không chắc bạn đang cố gắng làm gì. Tại sao bạn cần chạy trình quản lý cửa sổ của mình nhiều lần? Tôi nghĩ bạn chỉ có thể dwmchạy nền một lần và sau đó chạy dwm-statustrong một vòng lặp
Michael Mrozek

1
Nó cho phép bạn khởi động lại dwm mà không cần đóng chương trình. Phải thừa nhận rằng, tôi sử dụng nó không thường xuyên, nhưng dù sao nó cũng tiện dụng ... Xem: wiki.archlinux.org/index.php/ trộm "
jasonwryan

1
@jasonwryan Wow, thật tuyệt vời hackish :). Sau đó, có, cách tiếp cận đầu tiên có lẽ là tốt. Mặc dù bây giờ tôi đã hiểu theo cách thứ hai, nó chỉ nên tạo một vòng lặp trạng thái dwm mới mỗi khi bạn giết dwm, điều mà tôi cho là không thường xuyên, vì vậy tôi không chắc đó thực sự là nguyên nhân của vấn đề của bạn
Michael Mrozek
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.