ทำไม“ ในขณะที่ (จริง)” ที่ไม่มี“ Thread.sleep” ทำให้เกิดการใช้ CPU 100% บน Linux แต่ไม่ใช่ใน Windows


158

ฉันได้สร้างโปรแกรมอย่างง่ายใน java:

public static void main(String[] args) throws InterruptedException {
    while (true) 
        ;
}

ถ้าฉันใช้สิ่งนี้บนเครื่อง Linux แสดงว่ามีการใช้งาน CPU 100% แต่ไม่ทำให้ระบบปฏิบัติการช้า อย่างไรก็ตามถ้าฉันใช้รหัสเดียวกันบน Windows มันจะแสดงเฉพาะการใช้งาน CPU ประมาณ 20% เท่านั้น

ฉันใช้ Oracle JRE บน Windows และ OpenJDK 6 บน Linux

ฉันสงสัยว่าเธรดตัวกำหนดตารางเวลาของ Windows จะสุ่มและ Linux ไม่มีหรือไม่


5
มันขึ้นอยู่กับการจัดตารางงานระบบปฏิบัติการ
Subhrajyoti Majumder

52
คุณมีกี่คอร์? ตัวจัดการงาน Windows รายงาน 100% เมื่อแกนทั้งหมดไม่ว่าง ไม่เครื่องมือลินุกซ์ของคุณทำอะไรบางอย่างที่คล้ายกันหรือไม่ก็รายงาน 100% สำหรับมูลค่า 1 หลักของการทำงานและเมื่อแกนไม่ว่างก็100*N cores %?
yiding

2
ฉันมี 4 คอร์และบน linux ฉันใช้เครื่องมือตรวจสอบระบบ
Maniek

1
@Quoi ไม่ได้จริงๆ หากโปรแกรมนั้นทำงานทั้งหมดเธรดจะทำงานโดยไม่ขัดจังหวะทั้ง Windows และ Linux
David Heffernan

คำตอบ:


387

ตามค่าเริ่มต้นtopบน Linux จะทำงานในโหมด IRIX ในขณะที่ตัวจัดการงานของ Windows ไม่ทำงาน สมมติว่าคุณมี 4 คอร์:

  • เมื่อเปิดโหมด IRIX จะทำให้คอร์ที่ใช้งานอย่างเต็มที่ 1 คอร์ 100% และคอร์ 4 คอร์มี 400%

  • เมื่อปิดโหมด IRIX แล้ว 1 คอร์ที่ใช้งานเต็มรูปแบบคือ 25% และ 4 คอร์คือ 100%

ซึ่งหมายความว่าตามค่าเริ่มต้นtopบน Linux จะแสดงวงวนไม่สิ้นสุดเป็น ~ 100% และ Windows จะแสดงเป็น ~ 25% และมันหมายถึงสิ่งเดียวกันทุกประการ

คุณสามารถสลับโหมด IRIX ในขณะที่topกำลังทำงานอยู่กับ+Shift iนี่จะทำให้ตัวเลขตรงกัน


2
Yup - บน i7 '4 + 4' i7, (hyperthreading), CPU loop เล็กน้อยออกมาประมาณ 17-18%
Martin James

ทำไมผู้ตอบคำถามถึงมี 150UPs คะแนนของเขาคือ 700's ... มันเป็นข้อบกพร่องเหรอ? : - /
uday

5
@ uDaY เนื่องจากมีผู้เข้าร่วมสูงสุด 200 คนต่อวันผู้อัปโหลดใด ๆ หลังจากนั้นจะไม่ถูกนับรวมถึงผู้ตอบรับที่เป็นที่ยอมรับ
sa_ddam213

3
@thatotherguy เมื่อไหร่ที่จะกด shift-I เพื่อสลับ? ในขณะที่ด้านบนกำลังทำงานอยู่?
Geek
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.