หลังจาก Google ได้ปล่อยเจ้า Android NDK(https://droidsans.com/node/712) เลยอยากทดลองนิดหน่อยว่า ถ้าหากมีการคำนวณเล็กๆน้อยๆ การเรียกใช้การคำนวณผ่าน NDK กับการคำนวณใน Dalvik VM จะมีความเร็วในการประมวลผลต่างกันมากหรือไม่ ผมจึงได้ทดลองเขียนโปรแกรมเล็กๆประมวลผล บวก ลบ คูณ หาร นิดหน่อย (แต่วนลูปทำหลายรอบ^^) แล้วก็จับเวลาวัดผล มีกราฟมาให้ดูด้วยคร้าบบ
จากกราฟเพื่อความชัดเจนยิ่งขึ้นผมจึงได้ทดลองรันโปรแกรมตัวเดียวกันที่หลายความเร็ว CPU บนเจ้า HTC G1 ผลการทดลองก็จะเห็นได้ว่าการประมวลผลบน native นั้นเร็วกว่าบน Dalvik VM (ถึงแม้จะไม่หวือหวาก็ตาม) แต่ในการทดลองนี้ได้ใช้เพียงการประมวลผลทางคณิตศาสตร์ง่ายๆเท่านั้นเป็นตัวชี้วัด จึงยังสรุปไม่ได้ว่าการเรียกใช้ NDK นั้นจะช่วยให้เจ้า Android เร็วขึ้นมากเพียงใด
เป็นไปตามคาดครับว่าเจ้า NDK ไม่ได้ทำให้เจ้า Android เร็วจี๋เหมือน WebOS หรือ IPhone แต่ก็ไม่ได้ไร้ประโยชน์ซะทีเดียว ก็ต้องดูกันต่อไปครับว่าเจ้าตัวเขียวของเราจะกลายเป็น I-Robot เมื่อไหร่กัน 🙂
ผมขอจบการทดลองเพียงเท่านี้นะคร้าบบบบบ
สุดยอด! ทดลองเองซะด้วย เดี๋ยวแปลเป็นภาษาอังกฤษผลักดันน้องมิ้ลค์ให้โด่งดัง ฮ่าๆ
แต่พอจะมี Technical Term มั้ย เช่นว่าวนลูปกี่รอบ ใช้คำสั่งอะไร เอามาเป็นโค้ดเลยก็ได้อ่ะ (ถ้าให้ได้นะ)
อะเจ้ยยย โค้ดมันเอาเลขมาหารๆๆๆกันเฉยๆค้าบบบ แล้วก็วนลูปแสนรอบไม่มี technical อะไรเล้ย T T
นั่นแหละ เวลาเค้าจะทดสอบความเร็วในการประมวลผลเค้าก็ทำงั้น
แต่ว่าผลออกมาแบบนี้ก็คิดได้หลายอย่างนะ เช่นว่า Java ของ Android มีประสิทธิภาพ
จริงๆเท่าที่เล่นมาสิ่งที่ทำให้ Android ดูช้าขัดใจมากน่าจะมาจากสองสาเหตุหลัก
1. การทำงานของ GC เหมือนที่พี่เนยเคยบอก อันนี้เจอบ่อย จู่ๆก็กระตุ๊กกระตุกซะงั้น
2. การรัน background service อันนี้ต้องลงโปรแกรมหลายๆตัวแล้วนั่งสังเกตเรื่อยๆ เช่นเวลาถึงรอบอัพเดทเมลล์ เครื่องจะช้าได้ใจทันที
*การเพิ่ม clock แทบจะไม่ได้ช่วยลดปัญหาตอน GC ทำงาน มันก็จะกระตุ๊กกระตุกๆ เหมือนเดิม แต่มันจะทำให้ทุกอย่างไหลลื่นขึ้นในช่วงปกติ(ตอน GC นอนหลับ)
ปล. สมมุติฐานนะค้าบ
น่าจะเขียน 2 เรื่องนี้เป็น entry นึงเลยนะรายละเอียดมันน่าจะมีประโยชน์ 🙂
เยี่ยมไปเลยครับ พี่มิ้วค์