วิธีที่มีประสิทธิภาพมากที่สุดในการรัน 2 ในขณะที่ลูป


9

ขณะนี้ฉันใช้whileลูปสองแบบที่แตกต่างกันเพื่อเริ่มตัวจัดการหน้าต่างdwmและแถบสถานะที่พิมพ์ข้อมูลระบบลงไป

โซลูชันของฉันในขณะนี้คือเรียกใช้พวกเขาอย่างต่อเนื่องในสคริปต์เดียวกันเช่น:

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

ฉันเคยเห็นมันทำงานเป็นwhileวนซ้ำเช่นนี้:

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

ประการที่สองดูเหมือนว่าจะทำให้เกิด CPU แหลม ในแง่ของประสิทธิภาพ (เรียกใช้ทรัพยากรอย่างน้อยที่สุดเป็นต้น) วิธีที่ดีที่สุดในการใช้งานลูปทั้งสองนี้คืออะไรและเพราะเหตุใด

คำตอบ:


6

ฉันไม่แน่ใจว่าฉันกำลังชี้ให้เห็นอะไรบางอย่างที่ชัดเจน แต่วิธีแรกคือการสร้างสองลูปที่ทำงานตลอดไปในขณะที่วิธีที่สองคือการสร้างลูปที่ไม่มีที่สิ้นสุดที่สร้างลูปที่ไม่มีที่สิ้นสุดดังนั้นคุณจะจบลงด้วย - เพิ่มจำนวนลูปไม่ จำกัด มันสร้าง infinite loop, วิ่ง dwm แล้วสร้าง infinite loop อีกอัน - infinite loop แรกไม่หยุด บัตรผ่านแต่ละใบจะสร้างวงรอบ dwm สถานะอื่นแม้ว่าช่องอื่น ๆ กำลังทำงานอยู่แล้ว ( while trueจะทำให้บัตรวิ่งต่อไปเรื่อย ๆ )


ขอบคุณ Michael: ไม่มันไม่ชัดเจนและน่าสงสัยมากขึ้น นั่นหมายความว่าวิธีแรกเป็นวิธีที่ถูกต้องหรือมีวิธีที่มีประสิทธิภาพมากกว่าในการทำหรือไม่?
jasonwryan

@ jasonwryan ดีฉันไม่แน่ใจว่าคุณกำลังพยายามทำอะไร ทำไมคุณต้องใช้โปรแกรมจัดการหน้าต่างหลาย ๆ ครั้ง? ฉันคิดว่าคุณสามารถทำได้เพียงdwmครั้งเดียวหลังจากนั้นจึงdwm-statusวนซ้ำ
Michael Mrozek

1
จะช่วยให้คุณสามารถรีสตาร์ท dwm โดยไม่ต้องปิดโปรแกรม เป็นที่ยอมรับฉันใช้งานไม่บ่อยนัก แต่มันก็ยังมีประโยชน์ ... ดู: wiki.archlinux.org/index.php/ ...... "
jasonwryan

1
@jasonwryan ว้าวนั่นมันแฮ็คที่ยอดเยี่ยม :) ถ้าอย่างนั้นใช่วิธีแรกอาจจะดี แม้ว่าตอนนี้ฉันจะเข้าใจวิธีที่สองแล้ว แต่ควรสร้างวนเวียน dwm ใหม่ทุกครั้งที่คุณฆ่า dwm ซึ่งฉันถือว่าไม่บ่อยนักดังนั้นฉันไม่แน่ใจว่ามันเป็นต้นเหตุของปัญหาของคุณ
ไมเคิล Mrozek
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.