လွယ်လွယ်ပြောရရင် Queue ဆိုတာ အရင်ဝင်တဲ့သူ အရင်ထွက်ရတဲ့ Data စုစည်းမှုပါ။ အင်္ဂလိပ်လို First In, First Out — FIFO လို့ ခေါ်ပါတယ်။ နောက်မှ ဝင်တဲ့သူက တန်းရဲ့ အနောက်ဆုံးမှာ စောင့်ရပြီး အရှေ့ဆုံးက လူ အရင်ထွက်သွားမှ နောက်လူ ရှေ့တိုးရပါတယ်။
ကျွန်တော် Queue ကို အလွယ်ဆုံး နားလည်သွားတာက လက်ဖက်ရည်ဆိုင်မှာ တန်းစီတာနဲ့ ယှဉ်ကြည့်မှပါ။ ဆိုင်မှာ လူ ၅ ယောက် တန်းစီနေတယ် ဆိုပါစို့။ အရှေ့ဆုံးလူက အရင်မှာမယ်၊ အရင်ထွက်သွားမယ်။ နောက်မှ ရောက်လာတဲ့သူက ဘယ်လောက် အရေးကြီးနေနေ တန်းရဲ့ အနောက်ဆုံးကနေပဲ စောင့်ရတယ်။ တစ်ယောက်ယောက် ကြားဖြတ်ဝင်လို့မှ မရပါဘူး။ Queue ဆိုတာ ဒီတန်းစီတဲ့ စည်းမျဉ်းကို ကွန်ပျူတာထဲမှာ ထည့်ထားတာပါ။
နေ့စဉ်သုံးနေတဲ့ Program တွေထဲမှာ Queue က အများကြီး ပုန်းနေပါတယ်။ Printer ကို စာရွက် ၃ ရွက် တစ်ပြိုင်နက် ပို့လိုက်ရင် Printer က တစ်ရွက်ချင်း အစဉ်လိုက် ထုတ်ပေးတာက Queue ပါ။ YouTube မှာ Video တင်ရင် Upload တန်းစီတာလည်း Queue ပါပဲ။ ဖုန်းထဲမှာ Notification တွေ တစ်တစ်ခုချင်း ပေါ်လာတာလည်း အလားတူပါပဲ။
Queue နဲ့ လုပ်တဲ့ အလုပ်နှစ်ခု
Queue မှာ အဓိက အလုပ်က နှစ်ခုပဲ ရှိပါတယ်။ Enqueue — တန်းရဲ့ အနောက်ဆုံးမှာ အသစ်ထည့်တာ။ Dequeue — တန်းရဲ့ အရှေ့ဆုံးကနေ ထုတ်ယူတာ။ ဒီနှစ်ခုတည်းနဲ့ပဲ Queue တစ်ခုလုံး အလုပ်လုပ်ပါတယ်။
Python မှာ Queue သုံးချင်ရင် List နဲ့လည်း လုပ်လို့ရပေမယ့် collections ဆိုတဲ့ Library ထဲက deque က ပိုမြန်ပါတယ်။ ဥပမာ ကြည့်ရအောင်။
from collections import deque
tand = deque()
tand.append("Aung") # Enqueue
tand.append("Mya")
tand.append("Ko Ko")
print(tand.popleft()) # Dequeue -> "Aung" အရင်ထွက်တယ်
print(tand)
Aung က အရင်ဝင်လို့ အရင်ထွက်တယ်။ ဒါက Queue ရဲ့ အနှစ်သာရပါပဲ။
Queue နဲ့ မတူတဲ့ ဟာတွေ
Stack အကြောင်း ပြောရင် သတိရကြမှာပါ။ Stack က နောက်ဆုံးထည့်တာ အရင်ထွက်တယ်။ ပန်းကန်ပြား စီထားသလိုပါ။ Queue က တန်းစီသလိုပါ။ ဒီနှစ်ခုကို ရောမသွားဖို့ အရေးကြီးပါတယ်။
နောက်တစ်ခုက Priority Queue ပါ။ သာမန် Queue မှာ အားလုံး တန်းတူစောင့်ရပေမယ့် Priority Queue မှာတော့ အရေးကြီးတဲ့သူက အရင်ထွက်ရပါတယ်။ ဆေးရုံ Emergency ခန်းနဲ့ တူပါတယ်။ အရေးပေါ် လူနာက တန်းစီစရာ မလိုဘဲ အရင်ဝင်ရပါတယ်။ Operating System ထဲမှာ အလုပ်တွေကို အရေးကြီးမှုအလိုက် စီတဲ့အခါ ဒီပုံစံ သုံးပါတယ်။
အရင်က Message Queue အကြောင်း ရေးခဲ့ဖူးပါတယ်။ အဲဒါက App တွေကြားမှာ Message တွေ တန်းစီပို့တဲ့ စနစ်ပါ။ အခု ဒီ Queue ကတော့ Program တစ်ခုထဲမှာ Data ကို အစဉ်လိုက် ကိုင်တွယ်တဲ့ အခြေခံပုံစံပါ။ စိတ်ကူးတူပေမယ့် အသုံးချတဲ့ အဆင့် မတူပါဘူး။
ကိုယ်တိုင် စမ်းကြည့်ဖို့
အပေါ်က Python Code လေးကို ကိုယ့် ကွန်ပျူတာမှာ run ကြည့်ပါ။ နာမည်တွေ ပြောင်းပြီး ဘယ်သူ အရင်ထွက်လဲ စမ်းပါ။
Printer Queue ကို စစ်ကြည့်ပါ။ Print လုပ်နေတုန်း နောက်တစ်ခု ထပ်ပို့ရင် တန်းထဲမှာ ဘယ်လို စောင့်နေလဲ မြင်ရပါလိမ့်မယ်။
ကိုယ့် App ထဲမှာ တစ်ခုခု အစဉ်လိုက် လုပ်ရမယ့် အလုပ်ရှိရင် Queue နဲ့ တွေးကြည့်ပါ။ အရင်လာတာ အရင်လုပ်ရမယ်ဆိုရင် အဲဒါ Queue ပါပဲ။
Queue က ရိုးရိုးလေး တန်းစီတဲ့ စိတ်ကူးပါ။ ဒါပေမယ့် ကွန်ပျူတာတွေ၊ Server တွေ၊ App တွေရဲ့ အတွင်းထဲမှာ ဒီတန်းစီတဲ့ စည်းမျဉ်းလေးက အရာရာကို အေးအေးဆေးဆေး အစဉ်လိုက် ဖြစ်စေတာပါ။ တန်းစီတတ်တဲ့ Program က ရှုပ်ထွေးမှု နည်းပြီး ခန့်မှန်းရလည်း လွယ်ပါတယ်ဗျာ။ 🙂