thể trùng lặp:
Would a multithreaded Java application exploit a multi-core machine very well?Dual-core sử dụng CPU w/single chủ đề Java chạy
Tôi có một thread Java đơn giản và đơn giản như thế này chạy trên máy dual-core của tôi (Môi trường Windows XP 32 bit)
public static void main(String[] strs) {
long j = 0;
for(long i = 0; i<Long.MAX_VALUE; i++)
j++;
System.out.println(j);
}
Mong đợi của tôi là nó sẽ dính vào một CP duy nhất U khai thác triệt để bộ nhớ cache tốc độ cao (vì trong vòng lặp, chúng tôi tiếp tục hoạt động với biến địa phương j, do đó một sự tiêu hao CPU sẽ là 100% và khác sẽ là khá nhàn rỗi. Để tôi ngạc nhiên cả hai CPU đang được sử dụng khoảng 40% ~ 60% sau khi bắt đầu thread và việc sử dụng một CPU cao hơn một chút so với các CPU khác.
Câu hỏi của tôi là có bất kỳ cơ chế cân bằng tải nào của hệ điều hành khởi động khi phát hiện hết số dư không? Trong trường hợp của tôi là nó có thể là hệ điều hành Windows thấy rằng một CPU là đánh gần 100% và khác là gần như nhàn rỗi vì vậy nó sắp xếp lại các chủ đề cho CPU khác định kỳ?
# EDIT1 Tôi đã tìm thấy một lời giải thích có thể: http://siber.cankaya.edu.tr/ozdogan/OperatingSystems/ceng328/node130.html
Có, hệ điều hành sẽ trả lại chủ đề xung quanh. – Mysticial
Tôi nghĩ câu hỏi này đã được trả lời http://stackoverflow.com/questions/1649402/would-a-multithreaded-java-application-exploit-a-multi-core-machine-very-well – parion
Và lưu ý rằng hầu hết các chương trình Java sẽ cố gắng sử dụng một lõi và ở lại với một lõi, như tôi đã tìm ra với Minecraft. Đây là câu chuyện về một anh chàng đã tìm thấy điều này với máy tính mới của mình http://mlee888.wordpress.com/2006/03/31/java-performance-in-dual-coremultiprocessor-environment/ – parion