Tại sao, trong khi đó, trong khi (mà không đúng) mà không có Thread Thread. Ngủ thì gây ra việc sử dụng CPU 100% trên Linux mà không phải trên Windows?


158

Tôi đã tạo một chương trình đơn giản trong java:

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

Nếu tôi chạy cái này trên máy Linux, nó cho thấy việc sử dụng CPU 100%, nhưng không làm cho HĐH xuất hiện chậm. Tuy nhiên, nếu tôi chạy cùng một mã chính xác trên Windows, nó chỉ hiển thị khoảng 20% ​​mức sử dụng CPU.

Tôi đang sử dụng Oracle JRE trên Windows và OpenJDK 6 trên Linux.

Tôi đang tự hỏi liệu trình lập lịch biểu của Windows có các chủ đề ngẫu nhiên và Linux không?


5
Nó phụ thuộc vào Lập lịch tác vụ hệ điều hành.
Subhrajyoti Majumder

52
bạn có bao nhiêu lõi Trình quản lý tác vụ Windows báo cáo 100% khi TẤT CẢ các lõi đang bận. Công cụ linux của bạn có làm điều gì đó tương tự không, hay nó báo cáo 100% cho giá trị công việc của 1 lõi và khi tất cả các lõi đều bận rộn, phải 100*N cores %không?
Yiding

2
Tôi có 4 nhân và trên linux tôi sử dụng công cụ giám sát hệ thống
Maniek

1
@Quoi Không thật. Nếu chương trình đó là tất cả những gì đang chạy, thì luồng sẽ chạy mà không bị gián đoạn trên cả Windows và Linux.
David Heffernan

Câu trả lời:


387

Theo mặc định, toptrên Linux chạy ở chế độ IRIX được gọi là, trong khi Trình quản lý tác vụ Windows thì không. Giả sử bạn có 4 lõi:

  • Với chế độ IRIX trên, 1 lõi được sử dụng đầy đủ là 100% và 4 lõi là 400%.

  • Khi tắt chế độ IRIX, 1 lõi được sử dụng đầy đủ là 25% và 4 lõi là 100%.

Điều này có nghĩa là theo mặc định, toptrên Linux sẽ hiển thị một vòng lặp vô hạn là ~ 100% và Windows sẽ hiển thị nó là ~ 25% và nó có nghĩa chính xác là điều tương tự.

Bạn có thể chuyển chế độ IRIX trong khi topđang chạy với Shift+ i. Điều này sẽ làm cho các con số khớp với nhau.


2
Yup - trên '4 + 4' i7, (siêu phân luồng), một vòng CPU tầm thường xuất hiện ở mức khoảng 17-18%.
Martin James

Tại sao người trả lời mặc dù có 150UPs nhưng điểm của anh ta là 700 ... đó có phải là lỗi không ?? : - /
Uday

5
@uDaY, vì có tối đa 200 rep mỗi ngày, bất kỳ upvote nào sau đó không được tính, anwers vẫn được chấp nhận.
sa_ddam213

3
@thatotherguy Khi nào chính xác nhấn shift-I để chuyển đổi? Trong khi top đang chạy?
Geek
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.