• บทความนี้พูดถึงประสบการณ์ของผู้เขียนกับภาษาโปรแกรม Elixir โดยเน้นไปที่ความสามารถด้าน concurrency และ parallelism
  • ผู้เขียนใช้ Elixir เป็นภาษาโปรแกรมหลักมาตลอด 5-6 ปีที่ผ่านมา และยอมรับทั้งประสิทธิภาพและข้อเสียที่มีอยู่น้อยมาก
  • ผู้เขียนเปรียบเทียบโมเดล concurrency ของ Elixir กับ PHP และ Python โดยระบุว่าโมเดล concurrency ของ PHP พึ่งพาเว็บเซิร์ฟเวอร์ ขณะที่ Python ประสบปัญหาด้าน concurrency เพราะ Global Interpreter Lock (GIL)
  • Elixir สร้างขึ้นบน Erlang และ Erlang virtual machine (BEAM) ซึ่งถูกออกแบบมาเพื่อรัน lightweight process จำนวนมาก จึงเป็นรากฐานของ concurrency และ parallelism
  • เมื่อเริ่มทำงาน BEAM จะสร้าง thread สำหรับ scheduler ขึ้นมา และโดยค่าปริยายจะจัดการ scheduling process หนึ่งชุดต่อ CPU core ที่ใช้งานได้หนึ่งคอร์
  • ผู้เขียนอธิบายว่าคุณลักษณะด้าน functional programming แบบ immutable ของ Elixir และ Erlang เป็นตัวเลือกที่ถูกเลือกมาอย่างเหมาะสมเพื่อให้บรรลุ concurrency และ parallelism ในระดับสูง
  • process ใน Elixir จะไม่แชร์สถานะร่วมกัน และสามารถสื่อสารกันแบบ asynchronous ได้ผ่านการส่ง message เท่านั้น ทำให้มั่นใจได้ถึงการรันแบบ concurrent และ parallel อย่างปลอดภัย
  • ผู้เขียนชี้ว่าเวลาที่เขียนโค้ดด้วย Elixir โดยมาก web request ส่วนใหญ่จะเกิดขึ้นภายใน process เดียว ดังนั้นจึงแทบไม่ต้องกังวลกับหลักการพื้นฐานเหล่านี้มากนัก
  • Elixir มีกลไก async/await สำหรับงาน concurrent ซึ่งถูก implement อยู่ในโมดูล Task และมีฟังก์ชัน Task.async_stream สำหรับรัน Task กับแต่ละรายการที่สามารถ enumerate ได้
  • ผู้เขียนสรุปว่าตัวเลือกด้าน concurrency และ parallelism ที่ยอดเยี่ยมของ Elixir และ Erlang ไม่ใช่สิ่งที่มาคิดเพิ่มทีหลัง แต่ถูกสร้างไว้ในพื้นฐานของ runtime ตั้งแต่แรก ทำให้ concurrency บน BEAM ไม่ได้อันตรายหรือยากลำบาก

ยังไม่มีความคิดเห็น

ยังไม่มีความคิดเห็น