เห็นในกลุ่มภาษา Go Thailand ที่ Facebook นั้นมีการใช้งาน Benchmark
สำหรับวัดประสิทธิภาพการทำงานของ code ที่เขียนด้วยภาษา Go
จึงทำการสรุปวิธีการใช้งานไว้นิดหน่อย
ซึ่งมันง่ายมาก ๆ เพราะว่า เป็น package ที่มีมาในภาษา Go อยู่แล้ว
มาเริ่มกัน
อย่างแรกเลย Benchmark จะอยู่ใน package testing นั่นเอง
ช่วยวัดประสิทธิภาพการทำงาน code ที่เขียนด้วยภาษา Go ทั้งความเร็ว ทั้งการใช้งาน resource ต่าง ๆ การใช้งานเป็นดังนี้ เราจะเขียนไว้ในไฟล์ test นั่นเอง ชื่อ function สำหรับการทดสอบ Benchmark นั้น จะขึ้นต้นด้วยคำว่า Benchmark ตามด้วยตัวอักษรใหญ่ของชื่อ testcase ตัวอย่างเช่น [gist id="70220b7c2ac78ef16ca80b74b3ce0b28" file="sample_test.go"] คำอธิบาย เขียนเหมือนกับชุดการทดสอบปกติเลย แต่มีข้อแตกต่างนิดหน่อยดังนี้- ชื่อขึ้นต้นด้วยคำว่า Benchmark
- parameter ของ function จะเป็น testing.B
- ทำการ run หลาย ๆ ครั้ง โดยที่ค่า b.N จะเพิ่มขึ้นเรื่อย ๆ จนกว่าผลการทำงานจะมีค่าที่เสถียร
- function ที่ต้องทำการทดสอบต้องอยู่ใน loop ลักษณะนี้เท่านั้น
ยกตัวอย่างจากโจทย์ของกลุ่มภาษา Go ดังนี้
เลยนำมาทำ benchmark ตามที่พี่อูทำไว้บ้าง ได้ผลการทำงานดังนี้ [gist id="70220b7c2ac78ef16ca80b74b3ce0b28" file="run.text"] คำอธิบายจากผลการทดสอบ พบว่าแต่ละ test case ที่วัดผลมีเวลาการทำงานที่ต่างกัน คือ 1,297 และ 168 nanosecond ยิ่งตัวเลขต่ำยิ่งเร็ว ส่วนเลข 1,000,000 และ 10,000,000 จำนวนสูงสุดที่ run ใน 1 วินาที (ค่า duration ซึ่งเปลี่ยนได้ผ่าน flag -benchtime)ถ้าอยากรู้ว่าแต่ละ function ใช้ memory ไปเท่าไร ?
ทำได้ดังนี้ เพิ่ม flag -benchmem เข้าไป ดังนี้ [gist id="70220b7c2ac78ef16ca80b74b3ce0b28" file="run2.text"] จะเห็นว่า BenchmarkChonlasith ในแต่ละรอบนั้นใช้ memory เฉลี่ยไป 208 byte มีการ allocate หรือจองไป 8 เป็นค่าที่มีประโยชน์สำหรับการปรับปรุง code ต่อไป เพื่อให้ลดการใช้งาน memory ลง ดังชุด code ที่ 2 นั่นเอง โดยที่ source code เอาไว้ที่ Github::Benchmark with Go อย่า optimize code เยอะจนอ่านกันไม่รู้เรื่องนะ Make it work Make it right Make it fastแล้วยังสามารถนำไปวิเคราะห์การใช้งาน CPU/RAM หรือทำพวก profiling ได้อีกนะขอให้สนุกกับการเขียน code