နားလည်ထားရမယ့် အချက်
Queue ဟာ stack ရဲ့ ဆန့်ကျင်ဘက်ယူဆချက်ကို သုံးတယ် — element ဘယ်အစီအစဉ်နဲ့ ရောက်လာလဲ ဒီအစီအစဉ်အတိုင်း ပြန်ထုတ်ရတယ်၊ First In, First Out (FIFO)၊ ဒါကို ဆိုင်ခန်းရှေ့ တန်းစီနေတဲ့ လူတန်းစီနဲ့ တိုက်ရိုက်နှိုင်းယှဉ်နိုင်တယ်။ Python မှာ queue ကို plain `list` နဲ့ implement လုပ်ရင် `append()` က နောက်ဆုံးမှာ O(1) ထည့်နိုင်ပေမယ့်၊ `pop(0)` က ရှေ့ဆုံးကနေ ထုတ်ရာမှာ ကျန်တဲ့ element အားလုံးကို ဘယ်ဘက် တစ်နေရာစီ shift ချရလို့ O(n) ဖြစ်တယ် — queue တစ်ခုအတွက် ဒါက ပြင်းထန်စွာ inefficient ဖြစ်တယ်။ `collections.deque` ကတော့ ဒီကန့်သတ်ချက် မရှိဘူး — doubly linked structure ကနေ `append()` နဲ့ `popleft()` နှစ်ခုစလုံး O(1) ဖြစ်တယ်၊ ဒါကြောင့် queue implement လုပ်ဖို့ Python ရဲ့ standard library ကို သုံးမယ်ဆိုရင် deque က မှန်ကန်တဲ့ ရွေးချယ်မှုပဲဖြစ်တယ်။ Queue ရဲ့ classic use case တွေက task scheduling (job တွေကို ရောက်လာတဲ့ အစီအစဉ်အတိုင်း process လုပ်ချင်တဲ့အခါ) နဲ့ breadth-first traversal (graph/tree တစ်ခုကို level-by-level စူးစမ်းချင်တဲ့အခါ node တွေကို ရှာတွေ့တဲ့ အစီအစဉ်အတိုင်း queue ထဲထည့်ရတယ်) — ဒီနောက်ပိုင်း BFS lesson အတွက် အခြေခံဖြစ်တယ်။
လက်တွေ့ scenario နဲ့ ချိတ်ကြည့်မယ်
Tutorial Platform ရဲ့ background job system ဟာ queue ကို သုံးတယ် — lesson အသစ်တစ်ခု publish လုပ်တိုင်း 'search index rebuild' နဲ့ 'notification ပို့ခြင်း' လို job တွေကို queue ထဲ enqueue လုပ်ပြီး၊ worker process က FIFO အစီအစဉ်အတိုင်း တစ်ခုချင်းစီ dequeue လုပ်ပြီး process လုပ်တယ်။
အတူတူ စမ်းရေးကြည့်မယ်
from collections import deque
task_queue = deque()
# enqueue: add new tasks to the back - O(1)
task_queue.append("index new lesson")
task_queue.append("rebuild search index")
task_queue.append("send notification")
# dequeue: process tasks from the front, in arrival order - O(1)
while task_queue:
task = task_queue.popleft()
print("processing:", task)
# A plain list would need task_queue.pop(0), which is O(n) because
# every remaining element has to shift left one slot each time.Task သုံးခုကို enqueue လုပ်ခဲ့တဲ့ အစီအစဉ်အတိုင်း 'processing: index new lesson', 'processing: rebuild search index', 'processing: send notification' ဆိုပြီး တစ်ကြောင်းချင်းစီ print ထုတ်ပေးတယ်။၅ မိနစ် စမ်းကြည့်
Priority job (ဥပမာ 'urgent fix') ကို queue ရဲ့ ရှေ့ဆုံးမှာ ထည့်ချင်ရင် `deque` ရဲ့ ဘယ် method ကို သုံးရမလဲ စမ်းရေးပြီး ရလဒ် print ကြည့်ပါ။
သတိလေးတစ်ချက်
Queue ကို plain list နဲ့ implement လုပ်ပြီး `pop(0)` သုံးတတ်တယ် — task အရေအတွက် များလာလေ၊ shift cost ကြောင့် queue ဟာ progressively နှေးလာလေဖြစ်တယ်
Deque ကို stack လို `append()`/`pop()` ချည်း (right end) သုံးမိရင် FIFO order မရဘဲ LIFO order ဖြစ်သွားနိုင်တယ် — queue ဖြစ်ဖို့ `popleft()` ကို သုံးရမယ်
Wikipedia — Queue (abstract data type) — Data Structures & Algorithms