อดีตเด็กฝึกงานกูเกิลอธิบายเหตุผลทางเทคนิค Android ไม่ลื่นเพราะสถาปัตยกรรมเก่า

by mk
7 December 2011 - 14:18

หลังจาก Dianne Hackborn วิศวกรกูเกิลออกมาอธิบายเหตุผลทางเทคนิคว่าทำไม Android ไม่ลื่น ก็มีคนมาร่วมแจมมากมาย ความเห็นที่น่าสนใจเป็น "อดีต" เด็กฝึกงานคนหนึ่งของกูเกิลชื่อ Andrew Munn ซึ่งเขาเคยทำงานในทีม Android เสียด้วย

ก่อนจะเข้าสู่เนื้อหาหลัก ควรดูประวัติของ Andrew Munn กันก่อนนะครับ ตอนนี้เขาเป็นนักศึกษาด้านวิศวกรรมซอฟต์แวร์ปี 3 เคยฝึกงานกับบริษัทมาแล้วหลายแห่ง ได้แก่ Amazon, Google, Xtreme Labs และล่าสุดเขาจะไปฝึกงานกับทีม Windows Phone ในเดือนมกราคมที่จะถึงนี้

Andrew บอกว่าการออกมาวิจารณ์ครั้งนี้อาจทำให้เขาโดนตั้งคำถามเรื่องสถานที่ทำงาน แต่เขาก็ยืนยันว่ารัก Android มาก มีเสื้อยืด Android ใส่ได้เกินสัปดาห์ และยินดีจะทิ้ง MacBook มากกว่า Nexus S

เขาเคยทำงานในทีม Android แต่ไม่อยู่ในส่วนของเฟรมเวิร์ค และรู้จักกับ Romain Guy ซึ่งเป็นวิศวกรของกูเกิลที่คุมเรื่องกราฟิกและแอนิเมชันใน Android

เข้าเรื่อง

Andrew Munn แสดงความเห็นว่า เหตุผลที่ Android ไม่ลื่นเท่าระบบปฏิบัติการคู่แข่ง เกิดจากปัจจัยหลายประการ

  1. ปัจจัยแรกสำคัญที่สุดคือ Android ประมวลผลกราฟิกด้วยเธร็ดหลัก (main thread) ที่มีความสำคัญระดับ "ปกติ" (normal priority) ทำให้ตอนที่ระบบต้องประมวลผลหนักๆ ไม่มีอะไรรับประกันว่าเธร็ดนี้จะทำงานได้เต็มประสิทธิภาพ โดย Andrew Munn บอกว่า iOS ใช้วิธีที่ต่างออกไปคือแยก UI thread ที่มีความสำคัญระดับพิเศษ (ดูหมายเหตุประกอบ)
  2. ปัจจัยเรื่อง hardware acceleration ซึ่งความเห็นของเขามองว่ามันช่วยได้เยอะ ต่างไปจาก Dianne Hackborn ที่บอกว่าช่วยได้ไม่เยอะ
  3. garbage collector ของ Dalvik มีปัญหาเรื่องประสิทธิภาพ ทำให้แอพบางตัวของ Android อย่างเช่น photo gallery ต้องจำกัดเฟรมเรตไว้ที่ 30fps เพราะว่าถ้ารัน 60fps จะทำให้กระตุกเวลา garbage collector ทำงาน
  4. ประสิทธิภาพของ Tegra 2 มีจำกัด โดยเฉพาะเรื่องแบนด์วิธของหน่วยความจำ และไม่มีชุดคำสั่ง NEON (เทียบได้กับ SSE ของฝั่งอินเทล สำหรับประมวลคณิตศาสตร์แบบเมทริกซ์ที่ใช้ในการเรนเดอร์กราฟิก) ปัญหานี้จะหมดไปเมื่อหน่วยประมวลผลมีประสิทธิภาพดีขึ้น
  5. วิธีการเรนเดอร์และประกอบ UI (compositing) ยังไม่มีประสิทธิภาพพอ ในกรณีของ iOS จะเรนเดอร์ภาพแล้วเก็บไว้ในหน่วยความจำ เมื่อจะใช้งานก็แค่ใช้ GPU นำภาพมาประกอบเข้าด้วยกันเท่านั้น ในขณะที่ของ Android ต้องเรนเดอร์บางส่วนของหน้าจอใหม่ทุกครั้ง
  6. Dalvik ในฐานะ virtual machine ยังไม่พัฒนาเต็มที่เหมือนกับ JVM ถึงแม้ว่าจะแก้ปัญหาของ JVM ไปหลายอย่างก็ตาม (เขาบอกว่า Swing เองก็มีปัญหาหลายอย่าง) เขายกกรณีของไมโครซอฟท์ว่าตอนแรกจะเขียน UI ของ WP7 ด้วย Silverlight เหมือนกัน แต่สุดท้ายก็เปลี่ยนใจมาเขียนแบบ native เพื่อประสิทธิภาพที่ดีกว่าแทน

Andrew Munn บอกว่าปัญหาสำคัญของ Android คือข้อแรก การเรนเดอร์ UI ด้วยเธร็ดหลัก และเธร็ดมีความสำคัญระดับปกติ ซึ่งไม่สามารถการันตีเฟรมเรตว่าจะมากน้อยแค่ไหน

เขาบอกว่าเหตุผลที่ Android นำ UI ไปประมวลผลในเธร็ดหลักต้องย้อนไปถึงรากเหง้าของตัวมันเอง ที่ถูกสร้างขึ้นมาก่อน iPhone และวางตัวไว้แข่งกับ BlackBerry ทำให้ประสิทธิภาพของการตอบสนองจอสัมผัสไม่ถูกเน้นตั้งแต่แรก (เขาบอกว่า Windows Mobile, Symbian, BlackBerry ก็เจอปัญหาเดียวกันนี้) ภายหลังพอกูเกิลปรับยุทธศาสตร์มาแข่งกับ iPhone สถาปัตยกรรมเดิมกลับยังใช้งานอยู่มาจนถึงวันนี้

Andrew ยกคำพูดของ Romain Guy (ซึ่งเป็นวิศวกรของกูเกิล) ว่า Android ทุกวันนี้เกิดจากการตัดสินใจทางเทคนิคเมื่อหลายปีก่อน และ Romain ยอมรับว่าการประมวลผล UI มีปัญหา ซึ่งทางทีมก็พยายามจะหาหนทางอื่น ๆ เพื่อปรับปรุงประสิทธิภาพของมัน

Romain บอกว่าเป็นไปได้ที่กูเกิลจะสร้าง UI toolkit ใหม่ขึ้นมาแก้ปัญหานี้ แต่ก็บอกว่าแนวทางนี้มีข้อด้อยเหมือนกัน (Romain ไม่ได้บอกว่าอะไร แต่ Andrew บอกว่าแอพต้องเขียนใหม่ทั้งหมดเพื่อรองรับ UI toolkit ตัวนี้)

อย่างไรก็ตาม Andrew ให้ความเห็นว่าสุดท้ายแล้วกูเกิลเลี่ยงการเขียนใหม่ไม่ได้ เพราะเรื่องความลื่นเป็นปัญหาสำคัญที่ทำให้ภาพลักษณ์ของ Android มีปัญหา และเขาเชื่อว่าทีม Android ซึ่งมีคนเก่งๆ มากมายจะแก้ปัญหานี้ได้ในที่สุด

ที่มา - +Andrew Munn

หมายเหตุ: ประเด็นเรื่องเธร็ดที่ Andrew ยกมา มีผู้รู้หลายคนบอกว่า iOS เองก็ไม่ได้แยกเธร็ดพิเศษมาประมวลผล UI เช่นกัน แต่ความต่างของการเรนเดอร์เกิดจากวิธีการพัฒนาของเจ้าของแอพเอง และนักพัฒนาบน iOS มีธรรมเนียมที่จะปรับแต่งแอพของตัวเองจนลื่นมากกว่านักพัฒนาแอพบน Android (รายละเอียดอ่านต่อกันเองตามต้นฉบับครับ)

Blognone Jobs Premium