
รูปแบบ Concurrency
Worker pool, pipeline, fan-out/fan-in, การยกเลิก, context, errgroup, semaphore
1Worker pool ใน Go คืออะไร?
Worker pool ใน Go คืออะไร?
คำตอบ
Worker pool คือรูปแบบ concurrency ที่ใช้ goroutine (worker) จำนวนคงที่เพื่อประมวลผล task จาก channel ที่ใช้ร่วมกัน รูปแบบนี้ช่วยจำกัดจำนวน goroutine ที่ทำงานอยู่และควบคุมการใช้ทรัพยากรของระบบ ต่างจากการสร้าง goroutine หนึ่งตัวต่อหนึ่ง task ตรงที่ worker pool จะนำชุด worker กลับมาใช้ซ้ำเพื่อประมวลผล task จำนวนมากอย่างมีประสิทธิภาพ
2ข้อได้เปรียบหลักของการใช้ worker pool แทนการสร้าง goroutine หนึ่งตัวต่อหนึ่ง task คืออะไร?
ข้อได้เปรียบหลักของการใช้ worker pool แทนการสร้าง goroutine หนึ่งตัวต่อหนึ่ง task คืออะไร?
คำตอบ
การจำกัดจำนวน goroutine ที่ทำงานอยู่ช่วยควบคุมการใช้ทรัพยากรของระบบ (หน่วยความจำและ CPU) และหลีกเลี่ยงภาระเกิน การสร้าง goroutine หนึ่งตัวต่อหนึ่ง task อาจทำให้เกิด goroutine พร้อมกันหลายพันหรือหลายล้านตัว ทำให้ scheduler อิ่มตัวและหน่วยความจำหมด Worker pool รักษาจำนวน worker ที่เหมาะสมที่สุดซึ่งประมวลผล task ตามลำดับ จึงรับประกันประสิทธิภาพที่คาดการณ์ได้แม้ภายใต้ภาระสูง
3Pipeline ในบริบทของ concurrency ใน Go คืออะไร?
Pipeline ในบริบทของ concurrency ใน Go คืออะไร?
คำตอบ
Pipeline คือชุดของขั้นตอน (stage) ที่เชื่อมต่อกันด้วย channel โดยแต่ละขั้นตอนเป็นกลุ่มของ goroutine ที่รันฟังก์ชันเดียวกัน แต่ละขั้นตอนรับข้อมูลผ่าน channel ขาเข้า ทำการประมวลผล แล้วส่งผลลัพธ์ผ่าน channel ขาออก รูปแบบนี้ช่วยแบ่งการประมวลผลที่ซับซ้อนออกเป็นขั้นตอนที่เรียบง่ายและนำกลับมาใช้ใหม่ได้ ทำให้ประกอบและทดสอบแต่ละองค์ประกอบได้อย่างอิสระ
จะปิด channel ใน worker pool อย่างถูกต้องเพื่อส่งสัญญาณสิ้นสุดการประมวลผลได้อย่างไร?
ความแตกต่างระหว่าง fan-out และ fan-in คืออะไร?
+21 คำถามสัมภาษณ์
หัวข้อสัมภาษณ์ Go อื่นๆ
พื้นฐาน Go
โครงสร้างข้อมูล Go
อินเทอร์เฟซใน Go
การจัดการข้อผิดพลาด
พื้นฐาน Goroutine
Channels
Go Modules
เซิร์ฟเวอร์ HTTP
ไคลเอนต์ HTTP
การเข้ารหัส JSON
Database/SQL
แพ็กเกจ context
Testing
ไพรมิทีฟการซิงโครไนซ์
เฟรมเวิร์กเว็บ Go
การออกแบบ REST API
gRPC
Reflection
การจัดการหน่วยความจำ
การเพิ่มประสิทธิภาพการทำงาน
Generics
Go Design Patterns
Microservices
ความปลอดภัยและการยืนยันตัวตน
Docker & Containerization
Kubernetes Basics
Go ขั้นสูง
การพัฒนา CLI
เชี่ยวชาญ Go สำหรับการสัมภาษณ์ครั้งถัดไป
เข้าถึงคำถามทั้งหมด flashcards แบบทดสอบเทคนิค แบบฝึกหัด code review และตัวจำลองสัมภาษณ์
เริ่มใช้ฟรี