4
การใช้ CPU ต่ำเกินไปของ Java Application แบบหลายเธรดบน Windows
ฉันกำลังทำงานกับแอปพลิเคชัน Java เพื่อแก้ปัญหาการเพิ่มประสิทธิภาพเชิงตัวเลข - ปัญหาการเขียนโปรแกรมเชิงเส้นขนาดใหญ่ให้แม่นยำยิ่งขึ้น ปัญหาเดียวสามารถแบ่งออกเป็นปัญหาย่อยที่เล็กกว่าที่สามารถแก้ไขได้ในแบบคู่ขนาน เนื่องจากมีปัญหาย่อยมากกว่าคอร์ CPU ฉันจึงใช้ ExecutorService และกำหนดแต่ละปัญหาย่อยเป็น Callable ที่ได้รับการส่งไปยัง ExecutorService การแก้ปัญหาย่อยต้องเรียกไลบรารี่เนทีฟซึ่งเป็นตัวแก้ปัญหาการโปรแกรมเชิงเส้นในกรณีนี้ ปัญหา ฉันสามารถรันแอพพลิเคชั่นบน Unix และระบบ Windows ที่มีฟิสิคัลคอร์สูงสุด 44 คอร์และหน่วยความจำสูงสุด 256g แต่เวลาในการคำนวณบนวินโดวส์นั้นมีลำดับความสำคัญสูงกว่าบน Linux สำหรับปัญหาใหญ่ Windows ไม่เพียง แต่ต้องใช้หน่วยความจำเพิ่มมากขึ้น แต่การใช้งาน CPU ในช่วงเวลานั้นลดลงจาก 25% ในช่วงเริ่มต้นเป็น 5% หลังจากผ่านไปสองสามชั่วโมง นี่คือภาพหน้าจอของตัวจัดการงานใน Windows: ข้อสังเกต เวลาในการแก้ปัญหาสำหรับอินสแตนซ์ขนาดใหญ่ของปัญหาโดยรวมอยู่ในช่วงชั่วโมงต่อวันและใช้หน่วยความจำมากถึง 32 กรัม (บน Unix) เวลาแก้ปัญหาสำหรับปัญหาย่อยอยู่ในช่วง ms ฉันไม่พบปัญหานี้ในปัญหาเล็ก ๆ ที่ใช้เวลาเพียงไม่กี่นาทีในการแก้ไข …