- เวลาสลับคอนเท็กซ์: Async Task 0.2µs vs Kernel Thread 1.7µs
→ ถ้าการสลับเกิดขึ้นเพราะ I/O ความต่างของเวลาก็จะเท่ากัน (ทั้งคู่ 1.7µs)
→ ถ้าบังคับให้เวอร์ชันเธรดใช้แค่ซิงเกิลคอร์ ข้อได้เปรียบของ async ก็หายไปด้วย (แทบจะใกล้เคียงกัน)
-
การสร้างแทสก์ใหม่: async task ~0.3µs vs kernel thread 17µs
-
การใช้หน่วยความจำ: async task หลายร้อยไบต์ vs kernel thread 20KiB (user 9.5KiB, kernel 10KiB)
→ เป็นเกณฑ์จากแทสก์ที่แทบไม่ได้ทำอะไรเลย ดังนั้นถ้ามีการทำงานจริงก็จะต้องใช้มากกว่านี้
- สามารถสร้าง async task ได้ 250,000 รายการอย่างง่ายดาย แต่บนโน้ตบุ๊ก 4 คอร์/32GiB จำนวนสูงสุดของเธรดอยู่ที่ 80,000
1 ความคิดเห็น
อย่าพูดแค่ว่า asynchronous ดีกว่ามากในแง่ประสิทธิภาพ/ความคุ้มค่า แต่ควรเข้าใจกลไกภายในด้วย จึงได้ทำเบนช์มาร์กนี้ขึ้นมา
จริง ๆ แล้วการพัฒนาแบบ asynchronous ก็มีบั๊กเยอะและมีจุดที่ยากกว่า จึงต้องใช้อย่างระมัดระวัง