วิธีเขียนโปรแกรมวน Loop แล้ว CPU ขึ้นไม่ถึง 100%
จากการได้ไปอ่านที่เว็บพี่ไท้มาเกี่ยวกับ วิธีเขียนโปรแกรมวน Loop แล้ว CPU ขึ้นไม่ถึง 100%
แล้วเห็นว่ามีประโยชน์มาก เลยถือโอกาสทดลอง ว่าวิธีนี้จะช่วยได้มากแค่ไหนครับ เลยมา Note เป็นตัวอย่างไว้ครับ
1. แบบธรรมดาให้ loop 1,000,000,000 รอบ
/** * File Name : SleepTest.java * Created Date : Nov 13, 2009 : 1:34:13 PM * Copyright © 2009 www.fun4station.com */ package com.fun4station.example; import java.math.BigDecimal; /** * @Author Supot Saelao * @Version 1.0 */ public class SleepTest { public static void main(String[] args) { long start = System.currentTimeMillis(); BigDecimal amount = new BigDecimal(0); for (int i = 0; i < 1000000000; i++) { amount = amount.add(new BigDecimal(i)); } System.out.println("Amount : " + amount); long end = System.currentTimeMillis(); System.out.println("Start time : " + start); System.out.println("End time : " + end); System.out.println("Diff time : " + (end - start)); } }
ตัวอย่าง output
Amount : 499999999500000000 Start time : 1258094775765 End time : 1258094827484 Diff time : 51719
public static void main(String[] args) throws InterruptedException { long start = System.currentTimeMillis(); BigDecimal amount = new BigDecimal(0); for (int i = 0; i < 1000000000; i++) { amount = amount.add(new BigDecimal(i)); if ((i % 1000000) == 0) Thread.sleep(1L); } System.out.println("Amount : " + amount); long end = System.currentTimeMillis(); System.out.println("Start time : " + start); System.out.println("End time : " + end); System.out.println("Diff time : " + (end - start)); }
Amount : 499999999500000000 Start time : 1258103736703 End time : 1258103792593 Diff time : 55890
3. เพิ่ม Thread.sleep(10L);
Amount : 499999999500000000 Start time : 1258104035125 End time : 1258104100031 Diff time : 64906
4. เพิ่ม Thread.sleep(50L);
Amount : 499999999500000000 Start time : 1258104215484 End time : 1258104328765 Diff time : 113281
5. เพิ่ม Thread.sleep(100L);
Amount : 499999999500000000 Start time : 1258104477906 End time : 1258104658968 Diff time : 181062
6. เพิ่ม Thread.sleep(1000L);
Amount : 499999999500000000 Start time : 1258104761015 End time : 1258105907640 Diff time : 1146625
สรุปผลแบบคร่าวๆ
1. sleep(1L) ช้าไป ประมาณ 07.46% (4,171)
2. sleep(10L) ช้าไป ประมาณ 20.31% (13,187 ms)
3. sleep(50L) ช้าไป ประมาณ 54.34% (61,562 ms)
4. sleep(100L) ช้าไป ประมาณ 71.43% (129,343 ms)
4. sleep(1000L) ช้าไป ประมาณ 95.49% (1,094,906 ms)
1. แสดงว่าลดการใช้ CPU ไปได้ก็จริงแต่ก็ลดความเร็วไปเหมือนกัน หรือว่าผมเองเขียน code ไม่ดีพอก็ได้ครับ
2. จริงๆ ระหว่างที่ทดสอบนั้นผมก็ทำงานอย่างอื่นไปด้วยครับ
ป.ล นอกเรื่อง มีเงินขนาด 499,999,999,500,000,000 คงไม่ต้องมานั่งเขียนโปรแกรมอีก
ข้อมูลจาก
วิธีเขียนโปรแกรมวน Loop แล้ว CPU ขึ้นไม่ถึง 100%
Thread.sleep
No comments yet.