การศึกษาเปรียบเทียบประสิทธิภาพของ MicroPython บนไมโครคอนโทรลเลอร์หลากหลายรุ่นเมื่อเร็วๆ นี้ ได้จุดประกายการอภิปรายเกี่ยวกับข้อจำกัดในทางปฏิบัติของภาษานี้และวิธีการทดสอบ การศึกษาได้เปรียบเทียบประสิทธิภาพบนอุปกรณ์ตั้งแต่ ESP8266 ไปจนถึง Raspberry Pi Pico 2W โดยเผยให้เห็นช่องว่างด้านประสิทธิภาพที่สำคัญ ทำให้นักพัฒนาบางคนตั้งคำถามเกี่ยวกับความเหมาะสมของ MicroPython สำหรับแอปพลิเคชันบางประเภท
เวอร์ชันซอฟต์แวร์ที่ทำการทดสอบ:
- MicroPython 1.25.0 (รุ่นล่าสุดที่เปิดตัวอย่างเป็นทางการ)
- CPython 3.13 บนแล็ปท็อป
- CPython 3.9 บน Raspberry Pi 4
ผลการทดสอบประสิทธิภาพทำให้เกิดข้อสงสัย
ผลการทดสอบได้รับการวิพากษ์วิจารณ์อย่างรุนแรงจากชุมชนนักพัฒนา โดยเฉพาะเรื่องเวลาในการประมวลผลอัลกอริทึมทั่วไป การทดสอบ bubble sort ซึ่งเกี่ยวข้องกับการเรียงลำดับตัวเลขสุ่ม 2,000 ตัว ใช้เวลามากกว่า 80 วินาทีบนไมโครคอนโทรลเลอร์ 32 บิต 160MHz บางรุ่น สิ่งนี้ได้กระตุ้นการอภิปรายอย่างเข้มข้นเกี่ยวกับว่าระดับประสิทธิภาพเช่นนี้ทำให้ MicroPython ไม่เหมาะสมสำหรับแอปพลิเคชันที่ต้องการความไวต่อเวลาหรือไม่
สร้างตัวเลขสุ่ม 2000 ตัวและเรียงลำดับโดยใช้ bubble sort บน mcu 32bit 160Mhz ใช้เวลา 80 วินาที? นี่คือเหตุผลที่ micropython เป็นแค่ของเล่น
ผลการทดสอบแสดงให้เห็นว่า Raspberry Pi Pico 2W โดยทั่วไปมีประสิทธิภาพเหนือกว่า ESP32-S3 ในการทดสอบหลายรายการ ซึ่งทำให้หลายคนประหลาดใจเมื่อพิจารณาจากชื่อเสียงของ ESP32 ในฐานะตัวเลือกไมโครคอนโทรลเลอร์ระดับไฮเอนด์
ผลการทดสอบเปรียบเทียบ:
- Fibonacci (ตัวเลขลำดับที่ 30): Pico 2W ทำงานเสร็จสิ้นในเวลาประมาณครึ่งหนึ่งเมื่อเทียบกับ ESP32-S3
- Bubble Sort (เรียงลำดับตัวเลข 2,000 ตัว): เวลาในการประมวลผลเกิน 80 วินาทีในไมโครคอนโทรลเลอร์ความเร็ว 160MHz บางตัว
- Non-recursive Fibonacci: ประสิทธิภาพดีกว่าในทุกอุปกรณ์ที่ทำการทดสอบ
ชุมชนตั้งคำถามเกี่ยวกับวิธีการทดสอบ
นักพัฒนาหลายคนได้แสดงความกังวลเกี่ยวกับแนวทางและขอบเขตของการทดสอบ นักวิจารณ์โต้แย้งว่าการเปรียบเทียบประสิทธิภาพ MicroPython บนแพลตฟอร์มฮาร์ดแวร์ที่แตกต่างกันไม่ได้ให้ข้อมูลเชิงลึกที่มีความหมายเกี่ยวกับประสิทธิภาพของภาษา พวกเขาเสนอว่าการเปรียบเทียบกับโค้ด C ที่เทียบเท่าที่ทำงานบนไมโครโปรเซสเซอร์เดียวกันจะให้ข้อมูลที่มีค่ามากกว่าเกี่ยวกับค่าใช้จ่ายด้านประสิทธิภาพที่แท้จริงของ MicroPython
คนอื่นๆ ชี้ให้เห็นว่าการศึกษาพลาดโอกาสในการทดสอบ emitter ของ MicroPython ที่แตกต่างกันและคุณสมบัติการปรับปรุงประสิทธิภาพที่อาจส่งผลกระทบต่อผลการทดสอบอย่างมีนัยสำคัญ สมาชิกชุมชนบางคนสังเกตว่าอัลกอริทึมแบบเรียกซ้ำโดยไม่มี memoization ที่ทำให้เกิด stack overflow ควรเป็นพฤติกรรมที่คาดหวังมากกว่าจะเป็นข้อจำกัด
การเปรียบเทียบ RAM ของอุปกรณ์:
- ESP8266: ~80KB RAM
- ESP32-S3: ~512KB RAM
- Raspberry Pi Pico 2W: ~264KB RAM
- Framework Laptop: ~32GB RAM (มากกว่า ESP8266 ถึง 524,288 เท่า)
ผลกระทบในวงกว้างสำหรับการพัฒนาระบบฝังตัว
การอภิปรายขยายไปเกินกว่าตัวเลขประสิทธิภาพดิบไปสู่คำถามพื้นฐานเกี่ยวกับบทบาทของ MicroPython ในการพัฒนาระบบฝังตัว แม้ว่าการศึกษาดั้งเดิมจะยอมรับว่าไมโครคอนโทรลเลอร์มีจุดประสงค์ที่แตกต่างจากคอมพิวเตอร์แบบดั้งเดิม แต่การอภิปรายของชุมชนเผยให้เห็นความแตกแยกที่ลึกซึ้งยิ่งขึ้นเกี่ยวกับการแลกเปลี่ยนประสิทธิภาพที่ยอมรับได้
ตัวอย่างในทางปฏิบัติของผู้เขียนในการสร้างเทอร์โมสแตตแบบกำหนดเองในราคาต่ำกว่า 10 ยูโร แสดงให้เห็นถึงการเข้าถึงได้ของ MicroPython สำหรับโครงการของนักสมัครเล่น อย่างไรก็ตาม นักพัฒนาระดับมืออาชีพยังคงมีความเห็นแตกต่างกันเกี่ยวกับว่าความสะดวกของ syntax ของ Python นั้นสมเหตุสมผลกับการลดประสิทธิภาพในสภาพแวดล้อมการผลิตหรือไม่
การอภิปรายที่กำลังดำเนินอยู่สะท้อนให้เห็นความตึงเครียดในวงกว้างในการพัฒนาระบบฝังตัวระหว่างความง่ายในการใช้งานและประสิทธิภาพที่เหมาะสมที่สุด โดยมี MicroPython อยู่ในใจกลางของการอภิปรายเรื่องการแลกเปลี่ยนนี้
อ้างอิง: Benchmarking MicroPython