DEV Community

Myo Zaw Latt
Myo Zaw Latt

Posted on

Async ဆိုတာဘယ်လိုမျိုးလဲ

သင်တန်း Page တချို့က Marketing content တွေမှာ Async programming သုံးလိုက်ရင် App တွေကို ပိုမြန်လာစေတယ်ဆိုတာမျိုး ရေးနေတာတွေ့တယ်။ တခုနှစ်ခုမကတော့ဘူးဆိုတော့ လေ့လာနေသူတချို့က ဒါကိုဖတ်မိရင် Async ကို Speed up လုပ်ဖို့ သုံးရတယ်ဆိုတာမျိုး နားလည်မှုလွဲသွားနိုင်တယ်။

Async သုံးလိုက်လို့ ပိုမြန်သွားတာမဟုတ်ဘူးလားဆိုရင်တော့ ဟုတ်ပါတယ်။ ဒါပေမဲ့ Performance efficiency ဖြစ်လို့ ပိုမြန်တာလို့ပြောရလိမ့်မယ်။ သဘောကတော့ ရိုးရိုးတန်းတန်း Synchronous method တခုက တမိနစ်ကြာတယ်ဆိုပါတော့။ Async ပြောင်းလိုက်လို့ စက္ကန့် ၃၀ ဖြစ်မသွားပါဘူး။ တမိနစ်ကြာတဲ့ Task က တမိနစ်ပါဘဲ။ Async သုံးလိုက်လို့ ဘာကွာခြားသွားတာလဲဆိုတော့ အက်သည့်ကြာနေတဲ့ တမိနစ်အတွက် စောင့်နေစရာမလိုဘဲ တခြား Task တခုလုပ်လို့ရသွားတာပါ။ ဒါကို Performance efficiency ဖြစ်တယ်ပြောတာပါ။လဘက်ရည်ဆိုင်တခုမှာ ဝိတ်တာ ဆယ်ယောက်ရှိတယ်ဆိုပါတော့။ ဝိုင်း ၁ က ဝိတ်တာ ၁ ကို စားစရာတခုမှာလိုက်တယ်။ ဝိတ်တာ ၁ က အက်တာကို စားဖိုဆောင်ဆီသွားမှာပြီး စားစရာမပြီးမချင်းထိုင်စောင့်နေပါတယ်။ စားဖိုဆောင်က စားစရာရပြီပြောရင် အက်တာကိုယူလာပြီး ဝိုင်း ၁ ဆီပြန်သွားပေးပါတယ်။ ကြည့်လိုက်ရင် သူမှာလိုက်တဲ့ ဝိတ်တာကဘဲ သူမှာတဲ့စားစရာကို မပြီးမချင်းစောင့်ယူပြီး လာပြန်ပို့ပေးတာပါ။ ဒီပုံစံနဲ့ လည်ပတ်နေတယ်ဆိုရင် ဝိတ်တာ ၁၀ ယောက်ရှိတဲ့အတွက် ဝိုင်း ၁၀ ဝိုင်းအထိ ပြသနာရှိမှာမဟုတ်သေးပါဘူး။ ၁၁ ဝိုင်းမြောက်ကတော့ သူ့ရှေ့က ၁၀ ဝိုင်းထဲက တယောက်လွတ်တဲ့ အထိစောင့်ရမှာပါ။ ပြီးမှ လွတ်တဲ့ ဝိတ်တာကို လိုချင်တာမှာမယ်။ ပြီးရင် မှာတဲ့ဟာမပြီးမချင်းပါ ထပ်စောင့်နေရလို့ ၂ ခါ အချိန်ကုန်တော့မှာပါ။ ဒါဟာ Synchronous programming ရဲ့ အလုပ်လုပ်တဲ့ပုံစံပါ။ တခါ နောက်ပုံစံတမျိုးမှာတော့ ဝိုင်း ၁ က ဝိတ်တာ ၁ ကို စားစရာတခုမှာပြီဆို ဝိတ်တာ ၁ က ဒါကိုစားဖိုဆောင်ဆီပဲ သွားမှာပေးအုံးမှာပါဘဲ။ ဒီတခါတော့ အရင်တခါနဲ့မတူတော့ပါဘူး။ စားဖိုဆောင်ဆီ Schedular တခုပေးခဲ့ပါတယ်။ ဒီစားစရာပြီးရင်တော့ ဝိုင်း ၁ ကို ပို့ပေးပါဆိုတာမျိုးပေါ့။ ဒီတော့ သူက စားစရာမပြီးမချင်း ထိုင်စောင့်နေစရာမလိုတော့ပါဘူး။ တခြားဝိုင်းက ခေါ်တာကိုသွားပေးလို့ရပါပြီ။ စားစရာရပြီဆို စားဖိုဆောင်က ဝိတ်တာ ၁ ပေးခဲ့တဲ့ Schedular အတိုင်းအော်ပေးလိုက်ရင် အားတဲ့ဝိတ်တာက ယူပြီး သက်ဆိုင်ရာ ဝိုင်းကို ပို့ပေးမှာပါ။ ဒီတော့ ဆိုင်မှာ ဝိုင်း ဆန့်သလောက် လူအကုန်လာထိုင်ရင်တောင် ဝိတ်တာတွေကိုမှာဖို့ တဝိုင်းနဲ့ တဝိုင်း စောင့်နေစရာမလိုဘဲ မှာလို့ရသွားမှာပါ။ တခုသတိထားရမှာက အရင်ပုံစံမှာရော နောက်ပုံစံမှာရော စားစရာကို ချက်ပြုတ်နေတဲ့ အချိန်ကတော့ အတူတူပါဘဲ။ ၁၁ ဝိုင်းမြောက်ဟာ ရှေ့က ဝိုင်းတွေကို စောင့်ရတဲ့အချိန် မလိုအပ်တော့တာဘဲ ကွာသွားတာပါ။ ဒါက Asynchronous programming ရဲ့ အလုပ်လုပ်တဲ့ ပုံစံဘဲဖြစ်ပါတယ်။ ဒီနေရာမှာ Speed up ရဲ့ သဘောတရားက Task handling နဲ့ မတူပါဘူး။ ထားပါတော့ ထမင်းကြော်တပွဲကို ၅ မိနစ်လောက်ကြော်နေရရင် ပိုမြန်လာအောင်က ဝိတ်တာတွေကိုမှာတဲ့ပုံစံနဲ့ မဆိုင်ပါဘူး။ စားဖိုခန်းကို အဆင့်မြှင့်ရမှာဖြစ်ပါတယ်။ Async သုံးလိုက်လို့ ပိုမြန်လာမှာ မဟုတ်ဘူးဆိုတာ ဒါကိုပြောတာပါ။

ဒီတော့ ဘာလို့ Async သုံးလိုက်တာနဲ့ ပိုမြန်လာတယ်ထင်ရတာလဲ ဆက်ပြောပြပါမယ်။ ဥပမာ Web server တခုဆိုပါတော့။ Server က တချိန်တည်းမှာ Request 100 ကိုလက်ခံနိုင်ပြီး Sync နဲ့ run နေမယ်ဆိုရင် 101 ခုမြောက် Request ဟာ လေးနေမှာပါ။ လေးတာက Code နဲ့မဆိုင်ပါဘူး။ Server မှာ thread တွေမလွတ်တော့လို့ စောင့်နေရတာပါ။ အဲ Async သုံးတဲ့အခါမှာတော့ အဲတာကို စောင့်မနေရတော့တဲ့အတွက် မြန်မြန်ဆန်ဆန် Handle လုပ်ပြီး Response လုပ်လိုက်မှာပါ။ ဒါက Request ဘက်က ကြည့်ရင် ပိုမြန်သွားတယ်လို့ ခံစားရစေတာပါ။

Async programming ဟာ အင်မတန်အကျိုးများသလို သုံးတတ်ရင်ဆေး မသုံးတတ်ရင်ဘေးပါ။ Async အသုံးကောင်းလို့ Deadlock မိတာတို့ Error ရှာမရတာတို့ ဖြစ်တတ်ပါတယ်။ Async ကို အကျိုးရှိရှိအသုံးချနိုင်ဖို့ဆိုရင် Process, Thread, Thread Pool, TAP, CPU Bound Task, IO Bound Task စတဲ့ အခြေခံသဘောတရားတွေ နားလည်ထားဖို့ လိုအပ်ပါတယ်။ ဒီနေရာမှာတော့ Async အကြောင်း အကျယ်မရေးပြနိုင်ပါဘူး။ အဆင်သင့်တဲ့အခါ ရေးပါမယ်။ အဓိကက Async ဆိုတာ Speed up လုပ်ဖို့သုံးရတာ မဟုတ်ဘူးဆိုတာနဲ့ သူ့ရဲ့ အခြေခံသဘောတရားတခုကို မြင်သာအောင် ဖော်ပြလိုက်ခြင်းဖြစ်ပါတယ်။

Top comments (0)