Concurrency နှင့် Parallelism ဘာကွာလဲ

ဒီ Concurrency နှင့် Parallelism ဆိုတဲ့ concept ကိုအတော်များများ နားလည်သလိုလို နားမလည်သလိုလိုဖြစ်တက်ကြလို့ သေချာရှင်းပြပါ့မယ်။ Concurrency နှင့် Parallelism ဆိုတာတွေကိုမျက်လုံးထဲမြင်အောင် အမြဲတမ်းသုံးတဲ့ စားသောက်ဆိုင် ဥပမာနှင့်ရှင်းပြမယ်။ chef တယောက်နှင့် စားပွဲထိုးတွေအများကြီးရှိတဲ့စားသောက်ဆိုတခုကိုမျက်လုံးထဲမြင်ကြည့်လိုက်မယ်။

Non-Concurrent (Single Task Execution)

ဒီမှာ Chef ကတချိန်ထဲမှာ ဟင်းတမျိုးဘဲချက်နိုင်တယ်။ ဟင်းတမယ်ချင်ပီဆိုရင် အဲ့ဟင်းပီးမှနောက်ဟင်းတမျိုးကိုချက်တယ်။ ဒါက Non-Concurrent (Single Task Execution)

Concurrency

Concurrency is about dealing with lots of things at once. Parallelism is about doing lots of things at once.

https://go.dev/blog/waza-talk

ဒီမှာကြတော့ Chef ကဟင်းအိုးတအိုးတည်မယ်။ အဲ့ဟင်းအိုးတည်ထားတဲ့အချိန်မှာ ဟင်းသီးဟင်းရွတ်ခြွေတာ ဒီချက်နေတဲ့ဟင်းပီးသွားရင်နောက်အိုးအတွက်အဆင်သင့်ဖြစ်အောင်ပြင်တယ်ဒါမျိုးပေါ့။ ဒီမှာ Chef ကဟင်း ၂ မျိုးတပြိုင်ထဲချက်နေတာမဟုတ်ဘူး ဒါပေမယ့်သူကဟင်းချက်တာကော နောက်ဟင်းတွေအတွက်ပြင်တာ ဟင်းသီးဟင်းရွတ်ခြွေတာ ဆိုတဲ့ tasks တွေကို အချိန်ရရင်ရသလို switch လုပ်နေတာ။

Parallelism

ကျနော်တို့ဆိုင်က Chef နောက်ထက် ၁ ယောက်ငှားတယ်ဆိုရင် ဟင်းတွေပြိုင်တူချက်လို့ရမှာပေါ့။ တယောက်က ကြက်သားချက်… နောက်တယောက်ကငါးခြောက်ကြော် နဲ့လုံးဝပြိုင်တူချက်ကြတာ ခုနကလိုတယောက်ထဲက switch လုပ်တာမဟုတ်တော့ဘူး။

ဒီလောက်ဆိုရင် ကျနော်တို့ဥပမာသုံးခုနဲ့ မျက်လုံးထဲသေချာမြင်သွားလောက်ပီထင်ပါတယ်။ ဟင်းချက်တာနဲ့တော့ဟုတ်ပီ တကယ့်တကယ် CPU တွေ tasks/process တွေအနေနဲ့မြင်အောင်အောက်မှာပုံတွေနှင့်တကွရှင်းပြထားပါတယ်။

ပုံတွေမကြည့်ခင် ကျနော်တို့အပေါ်မှာပေးခဲ့တဲ့ ဥပမာမှာ Chef ဆိုတာ CPU။ ဟင်းပွဲတွေက CPU ပီးကမယ့် tasks/process တွေပေါ့။ ဟင်းအိုးဆူအောင်မီးဖိုပေါ်တင်ထားတာကိုစောင့်နေရတဲ့အချိန်ဆိုတာမျိုးကြတော့ ကျနော်တို့ program က file တခုခုကို read လုပ်ပီး process လုပ်နေတာစောင့်နေရတဲ့အချိန်ပေါ့။ ဟင်းအိုးတည်ထားတုန်းနောက်ဟင်းအတွက်ပြင်ဆင်တာမျိုးကြတော့ CPU က process တွေကို switch လုပ်နေတာမျိုးပေါ့။

ဒီအောက်ကပုံကတော့ Non-Concurrent (Single Task Execution) အတွက်ပါ။ CPU Core တခုက task/process ၂ ခုလုပ်စရာရှိတာ တခုပီးမှနောက်တခုလုပ်နေတာပါ။

ဒီအောက်ကပုံကတော့ Concurrency အတွက်ပါ။ CPU Core တခုဘဲရှိတယ်။ ဒါပေမယ့် tasks/process တွေကို switch ပီးအလုပ်လုပ်နေတယ်။

ဒီအောက်ကပုံကတော့ Parallelism အတွက်ပါ။ CPU Core 2 ခုက task တခုချင်းစီကိုပြိုင်တူလုပ်နေတယ်။

Key Main Point ပြန်ပြောရမယ်ဆိုရင်

Concurrency ဆိုတာ တချိန်ထဲမှာ အလုပ်တွေအများကြီးအောင် manage လုပ်တာ။ (switch လုပ်)
Parallelism ဆိုတာကြ တချိန်ထဲမှာ အလုပ် ၂ ခုပြိုင်တူလုပ်တာ။

ကျနော်လေ့လာထားတဲ့ resources

Concurrency is not Parallelism by Rob Pike

Leave a Reply

Up Next:

Go concurrency အခြေခံစီးရီး

Go concurrency အခြေခံစီးရီး