จากคอมเมนท์ข่าว กูเกิลเตรียมพัฒนา Python ขนานใหญ่ ใน blognone ทำให้ผมเพิ่งรู้ว่า java ทำงานได้เร็วกว่า python เพราะมี Java VM ที่เป็น Just-in-Time Compiler (JIT Compiler)
JIT Compiler ตามความเข้าใจของผม (งูๆปลาๆ)
ตามปกติ Java VM ทำหน้าที่เป็น Interpreter เวลาเรารันโปรแกรมก็จะแปลโค้ดทีละบรรทัดเป็นภาษาเครื่องที่สอดคล้องกัน และเมื่อเจอโค้ดเดิมๆ Interpreter ก็ต้องแปลโค้ดเดิมซ้ำทำให้เสียเวลา
JIT Compiler เข้ามาช่วยเพิ่มความเร็วได้ โดยมันจะคอย cache ส่วนของโค้ดที่เคยแปลเป็นภาษาเครื่องไว้ ทำให้เวลาเจอโค้ดเดิมก็สามารถเรียกภาษาเครื่องที่ cache ไว้พ่นใส่ CPU ได้ทันที
แล้ว Python มี JIT Compiler ไหม?
มีครับ ชื่อว่า Psyco (ไม่ได้สะกดผิดนะ) ได้รู้จักมันครั้งแรกจากคอมเมนท์ข่าวใน blognone อีกเช่นเคย คำอธิบายสั้นๆ เกี่ยวกับ Psyco:
มันคืออะไร: Python extension ที่ช่วยให้รันโปรแกรมเดิมที่เขียนด้วย Python ให้เร็วขึ้นโดยไม่ต้องแก้โค้ดเดิม
ประโยชน์: โปรแกรมรันเร็วขึ้น 2 เท่า ถึง 100 เท่า (โดยทั่วไปเร็วขึ้น 4 เท่า)
ข้อเสีย: Psyco ใช้หน่วยความจำเยอะ และรันบน Intel 386-compatible processor ภายใต้ระบบปฏิบัติการใดๆ (ในยุคข้าวยาก หมากแพง แต่แรมถูก จะใช้แรมมากๆ ก็คงไม่เป็นไรมั้งครับ 🙂 )
ทดลองกันหน่อย
# โปรแกรมปกติ import time start = time.clock() def fib(n): if n == 0 or n == 1: return 1 return fib(n-1)+fib(n-2) print "Fib 40 = ", fib(40) end = time.clock() print "Duration: ", (end-start), " seconds" # Output: # 165580141 # Duration: 106.025350987 seconds
# ใช้ psyco import time start = time.clock() import psyco ### เพิ่มโค้ดบรรทัดนี้ psyco.full() ### กับบรรทัดนี้ def fib(n): if n == 0 or n == 1: return 1 return fib(n-1)+fib(n-2) print "Fib 40 = ", fib(40) end = time.clock() print "Duration: ", (end-start), " seconds" # Output: # 165580141 # Duration: 6.715894129 seconds
เฮือก… จาก 106.0 วินาที ลดเหลือ 6.7 วินาที! พอลองเอา Psyco ไปใช้กับโปรแกรมตัดคำไทย cpskCut ปรากฏว่าบนข้อมูลทดสอบ 5 แสนคำ จากเดิมใช้เวลา 78 วินาที ลดเหลือ 34 วินาที (โดยเพิ่มโค้ดแค่ 2 บรรทัดด้านบนครับ)
ใครอยากลองเอาไปใช้บ้างก็ ดาวน์โหลด Psyco สำหรับ Python 2.6 ได้ที่นี่ ครับ
เร็วขึ้นแบบเห็นได้ชัดเลย แต่เสียดายที่เราไม่ค่อยมีโปรแกรมใหญ่ๆเท่าไหร่
น่าเอาไปลองกับพวก web? ใช้ได้ปะวะ
ป.ล. ถ้าใช้กับ nontri login จะทำให้โหลด source page เร็วขึ้นบ้างมั้ย 5555555555555
java ตอนนี้ที่เป็น jit รวมอยู่ใน JDK 6 แล้วคือ hotspot
แต่เท่าที่ลอง OpenJDK ของ java ที่เป็น opensource ทั้งหมด รู้สึกว่า IcedTea เร็วกว่า hotspot อยู่เหมือนกัน ไว้วันหลังลองรีวิวให้ดู เพียงแต่ OpenJDK มันไม่มี build บน windows ถ้าอยากใช้ต้อง build เอง
That’s so cool !! Wow!
Thank for this knowledge.
เห็นด้วยกับ RTSP ด้วยคับ
เอาไปใช้กับ Web ได้รึเปล่า
ผมกกำลังสนใจ 😀
@RTSP @Jojas ถ้าเว็บมีการประมวลผลซ้ำๆ (มีลูปนานๆ) ก็น่าจะช่วยให้เร็วขึั้นได้ครับ
แต่ถ้าเว็บถูกเรียกขึ้นทำงานแว๊บนึง แล้วก็หยุด (อาจช้าลงเพราะเสียเวลา compile นานกว่า เวลาที่ใช้รันโปรแกรม)
แต่ python ธรรมดา ก็เร็วกว่า php มากอยู่แล้วนะครับ 🙂
มันยอดมากจอร์จ
อืม เยี่ยมเลยครับ