คิวก็เหมือนรอคิว
ลองนึกภาพว่าคุณกำลังต่อแถวเพื่อซื้อผลิตภัณฑ์ Apple ล่าสุด ซื้อตั๋วหนัง หรือจ่ายค่าของชำ
นี่คือคิว!
คุณสามารถใช้คิวในโครงการ Ruby ของคุณ
อย่างไร
คิวช่วยให้คุณประมวลผลสิ่งต่าง ๆ ตามลำดับการมาถึง ดังนั้นจึงมีประโยชน์สำหรับทุกสิ่งที่จำเป็นต้องให้ความสำคัญกับสิ่งต่าง ๆ ยิ่งรอนานขึ้น
คุณสามารถนำไปใช้กับ :
- จำลองคิวในโลกแห่งความเป็นจริง
- ใช้อัลกอริธึม เช่น การค้นหาแบบกว้างก่อน (BFS)
- ควบคุมการเข้าถึงทรัพยากรที่ใช้ร่วมกัน เช่น CPU ดิสก์ เครื่องพิมพ์ ฯลฯ
ตอนนี้…
มาดูโค้ดกัน!
วิธีการใช้คิวใน Ruby
อาร์เรย์สามารถทำงานเหมือน Queue
หากคุณใช้วิธีการที่ถูกต้อง
วิธีการเหล่านี้ :
unshift
(หรือprepend
ด้วย Ruby 2.5+)pop
เมื่อคุณ unshift
คุณกำลังเพิ่มหนึ่งรายการในคิว
ตัวอย่าง :
queue = [] queue.unshift "apple" queue.unshift "orange" queue.unshift "banana" # ["banana", "orange", "apple"]
เมื่อคุณ pop
คุณลบรายการสุดท้ายออกจากคิว
นี่คือรายการถัดไปที่ควรดำเนินการ
ตัวอย่าง :
queue.pop # "apple" queue.pop # "orange"
คุณสามารถดูรายการสุดท้ายเพื่อดูว่า "ใครคือรายต่อไป" โดยไม่ต้องลบรายการนี้
ตัวอย่าง :
queue[-1] # "banana"
การดำเนินการนี้เรียกว่า peek
.
คิวทับทิมพร้อมกัน
Ruby มีเธรดที่ปลอดภัย บล็อก Queue
ชั้นเรียน
คุณสามารถใช้คิวนี้เพื่อประสานงานการทำงานในโปรแกรมแบบมัลติเธรดได้
ตัวอย่าง :
que = Queue.new que << 1 que << 2 que << 3
คุณสามารถรับรายการจากคิวนี้ด้วย pop
:
que.pop # 1 que.pop # 2
ถ้าคิวว่าง เรียก pop
จะทำให้เธรดปัจจุบันของคุณเข้าสู่โหมดสลีป &รอจนกว่าจะมีการเพิ่มบางอย่างลงในคิว .
นั่นคือความหมายของการ "บล็อก"
คุณสามารถหลีกเลี่ยงการบล็อกได้โดยส่ง true
เพื่อ pop
:
que.pop(true)
สิ่งนี้จะเพิ่ม ThreadError: queue empty
ยกเว้นเมื่อคิวว่าง
วิธีใช้คิวที่มีขนาด
คิวที่มีขนาดจะเหมือนกับคิวปกติแต่มีการจำกัดขนาด
ตัวอย่าง :
que = SizedQueue.new(5)
เมื่อคิวเต็มให้กด push
(เหมือนกับ <<
) การดำเนินการจะระงับเธรดปัจจุบันจนกว่ารายการจะถูกลบออกจากคิว
ตัวอย่าง :
que.push(:bacon)
คุณสามารถเลือกที่จะยกข้อยกเว้นแทนโดยส่ง true
เป็นอาร์กิวเมนต์:
que.push(:bacon, true)
สิ่งนี้ทำให้เกิด ThreadError: queue full
.
วิดีโอสอน
สรุป
คุณได้เรียนรู้เกี่ยวกับคิว Ruby แล้ว!
คุณสามารถใช้คิวเมื่อต้องการประมวลผลงานในลำดับ FIFO (เข้าก่อน-ออกก่อน) . มีสองวิธีในการใช้งานคิว ใช้อาร์เรย์หรือใช้ Queue
ชั้นเรียน
ขอบคุณที่อ่าน. 🙂