9 คะแนน โดย xguru 2021-02-13 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • เวลาสลับคอนเท็กซ์: 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 ความคิดเห็น

 
xguru 2021-02-13

อย่าพูดแค่ว่า asynchronous ดีกว่ามากในแง่ประสิทธิภาพ/ความคุ้มค่า แต่ควรเข้าใจกลไกภายในด้วย จึงได้ทำเบนช์มาร์กนี้ขึ้นมา

จริง ๆ แล้วการพัฒนาแบบ asynchronous ก็มีบั๊กเยอะและมีจุดที่ยากกว่า จึงต้องใช้อย่างระมัดระวัง