အင်တာနက်စနစ်များကိုစဉ်ဆက်မပြတ်ချဲ့ထွင်ခြင်းဖြင့်မက်ဆေ့ခ်ျစီတန်းမှုသည်ဖြန့်ဝေထားသောဗိသုကာများတွင်မရှိမဖြစ်လိုအပ်သောအဓိကအစိတ်အပိုင်းဖြစ်လာသည်။ စနစ်၏တစ်ပြိုင်နက်တည်းလုပ်ဆောင်နိုင်မှုနှင့်တုန့်ပြန်မှုစွမ်းဆောင်ရည်ကိုတိုးတက်စေရန် esolynchronous coroutines များကိုမိတ်ဆက်ပေးခြင်းသည်ထိရောက်သောဖြေရှင်းချက်တစ်ခုဖြစ်လာသည်။
ပြတ်တောင်းပြတ်တောင်းပြတ်တောင်းပြတ်တောင်းပြတ်တောင်းပြတ်တောင်းပြတ်သားစွာရိုက်နှက်ခြင်းသည်တစ်ပြိုင်နက်တည်းတစ်ပြိုင်နက်တည်းပတ် 0 န်းကျင်တွင်မြင့်မားသောတစ်ပြိုင်နက်တည်းလုပ်ဆောင်မှုကိုရရှိနိုင်မည်ဖြစ်သောတစ်ပြိုင်နက်တည်းကတစ်ပြိုင်နက်တည်းပရိုဂရုရေနာပုံစံဖြစ်သည်။ အစဉ်အလာအမျိုးမျိုးသောချည်မော်ဒယ်များနှင့်နှိုင်းယှဉ်ပါက asynchronous coroutines များသည်အောက်ပါအသိဉာဏ်ရှိသောအားသာချက်များရှိသည်။
Lightweight: Corouttines များသည်စနစ်အရင်းအမြစ်သုံးစွဲမှုကိုအလွန်လျော့နည်းစေသည့်ချည်များကိုမကြာခဏဖန်တီးရန်နှင့်ဖျက်ဆီးရန်မလိုအပ်ပါ။
မြင့်မားသောထိရောက်မှု - ပိတ်ဆို့ခြင်းမဟုတ်သော I / O နှင့် Event Loop Loop Mineism များမှတဆင့် Corouttines သည်မြန်မြန်အလုပ်ပြောင်းခြင်းနှင့်အောက်ပိုင်း overhead ဖြင့်စီစဉ်နိုင်သည်။
အကြီးအကျယ် - စီးပွားရေးပမာဏတိုးလာသည်နှင့်အမျှ Corroutine မော်ဒယ်သည်စနစ်၏တစ်ပြိုင်နက်တည်း capt များကိုကိုယ်တိုင်ညှိနှိုင်းခြင်းမရှိသော parameters များကိုလက်ဖြင့်ပြုပြင်ခြင်းမရှိဘဲအလွယ်တကူချဲ့ထွင်နိုင်သည်။
မက်ဆေ့ခ်ျတန်းစီစနစ်ကိုဒီဇိုင်းရေးဆွဲရာတွင်အဓိကဒြပ်စင်များသည်မက်ဆေ့ခ်ျသိုလှောင်ရေးဖွဲ့စည်းပုံနှင့်ထုတ်လုပ်သူစားသုံးသူပုံစံများပါဝင်သည်။ များသောအားဖြင့်ပထမ ဦး ဆုံးပထမ ဦး ဆုံးထွက်ပေါက် (FIFO) ဖွဲ့စည်းပုံကိုထိရောက်သောဆက်သွယ်ရေးကိုရရှိရန်ပုံနှိပ်ထုတ်ဝေသည့်ယန္တရားနှင့်ပေါင်းစပ်ထားသည်။ အောက်ဖော်ပြပါအချက်များက asynchronous coroutines အပေါ် အခြေခံ. ရိုးရှင်းသောမက်ဆေ့ခ်ျကိုတန်းစီ၏ဥပမာတစ်ခုဖြစ်သည်။
import asyncio
message_queue = []
subscriptions = {}
async def publish(channel, message):
message_queue.append((channel, message))
await notify_subscribers()
async def notify_subscribers():
while message_queue:
channel, message = message_queue.pop(0)
for subscriber in subscriptions.get(channel, []):
asyncio.ensure_future(subscriber(message))
async def subscribe(channel, callback):
if channel not in subscriptions:
subscriptions[channel] = []
subscriptions[channel].append(callback)
async def consumer(message):
print("Received message:", message)
async def main():
await subscribe("channel1", consumer)
await publish("channel1", "hello world")
if __name__ == "__main__":
asyncio.run(main())ဤဥပမာတွင် Message_queue သည်မက်ဆေ့ခ်ျများခေတ္တသိမ်းဆည်းရန်အသုံးပြုသည်။ Subscriptions သည် ချန်နယ်တစ်ခုစီ၏စာရင်းပေးသွင်းသူများကိုမှတ်တမ်းတင်ထားသည်။ ထုတ်ဝေသော စာစောင်ကိုထုတ်ဝေသည့်အခါစနစ်သည်အပြောင်းအလဲအတွက်သက်ဆိုင်ရာ သုံးစွဲသူများ ကိုအကြောင်းကြားရန်စနစ်သည်အလိုအလျောက်ဖြစ်ပေါ်စေလိမ့်မည်။
ယေဘူယျအားဖြင့်တစ်ပြိုင်နက်တည်းဆိုသည့်အခြေအနေများတွင်ပြတ်ပြတ်သားသားမက်ဆေ့ခ်ျကိုတန်းစီစနစ်၏စွမ်းဆောင်ရည်ကို allynchronous i / o နှင့် coroutine ရေကန်များကိုမိတ်ဆက်ပေးခြင်းဖြင့်ပိုမိုကောင်းမွန်စေနိုင်သည်။ Coroutine Pool သည်တစ်ပြိုင်နက်တည်းအလုပ်များကိုထိရောက်စွာထိန်းချုပ်နိုင်ပြီးအခြေအနေတွင် switching and throughpput ကိုတိုးတက်အောင်လုပ်ခြင်းကိုလျှော့ချနိုင်သည်။
import asyncio
from concurrent.futures import ThreadPoolExecutor
message_queue = []
subscriptions = {}
executor = ThreadPoolExecutor()
async def publish(channel, message):
message_queue.append((channel, message))
await notify_subscribers()
async def notify_subscribers():
while message_queue:
channel, message = message_queue.pop(0)
for subscriber in subscriptions.get(channel, []):
await execute(subscriber(message))
async def execute(callback):
loop = asyncio.get_running_loop()
await loop.run_in_executor(executor, callback)
async def subscribe(channel, callback):
if channel not in subscriptions:
subscriptions[channel] = []
subscriptions[channel].append(callback)
async def consumer(message):
print("Received message:", message)
async def main():
await subscribe("channel1", consumer)
await publish("channel1", "hello world")
if __name__ == "__main__":
asyncio.run(main())Optimized version တွင် Coroutine Pool သည် threadpoolexecuter မှတဆင့်ဖန်တီးထားပြီး execute function သည် callbacks ကိုကွပ်မျက်ခြင်းများအတွက် choldbacks ကိုသယ်ဆောင်ရန်အသုံးပြုသည်။ ဤဒီဇိုင်းသည်အခြေအနေပြောင်းလဲခြင်းကိုထိရောက်စွာပြောင်းလဲပြီးမက်ဆေ့ခ်ျကိုအပြောင်းအလဲမြန်နှုန်းကိုသိသိသာသာတိုးတက်စေသည်။
အမှန်တကယ်ထုတ်လုပ်မှုပတ် 0 န်းကျင်တွင် System Architecture သည် System Architecture ကိုမက်ဆေ့ခ်ျကိုဇွဲရှိခြင်း, အတည်ပြုခြင်းယန္တရားများကိုဖြန့်ကျက်ရန်နှင့်မြင့်မားသောယုံကြည်စိတ်ချရမှုနှင့်ပမာဏရရှိရန်ဖြန့်ကျက်မှုဖြန့်ကျက်ခြင်းများဖြန့်ကျက်ခြင်းများကိုပေါင်းစပ်ခြင်းဖြင့်ပိုမိုတိုးတက်အောင်ပြုလုပ်နိုင်သည်။
ပြတ်တောင်းပြတ်တောင်း coroutines ၏လက်တွေ့ကျသောအသုံးချမှုဖြင့်မက်ဆေ့ခ်ျတန်းစီစနစ်သည်တစ်ပြိုင်နက်တည်းတစ်ပြိုင်နက်တည်းမြောက်သောပတ် 0 န်းကျင်တွင်မြင့်မားသောတစ်ပြိုင်နက်တည်းတိုးတက်မှုများရရှိနိုင်ရန်ဖြစ်သည်။ Asynchronous I / O နှင့် Coroutine Pool ပေါင်းစပ်မှုပေါင်းစပ်ခြင်းသည်စနစ်အားဟာ့ဒ်ဝဲကုန်ကျစရိတ်များမပေးဘဲစွမ်းဆောင်ရည်ကိုသိသိသာသာတိုးတက်စေရန်ခွင့်ပြုသည်။ ဤဖွံ့ဖြိုးတိုးတက်မှုပုံစံကိုကျွမ်းကျင်သည့်ပုံစံကိုကျွမ်းကျင်စေခြင်းသည်စွမ်းဆောင်ရည်မြင့်ဖြန့်ဝေသောစနစ်များကိုတည်ဆောက်ရန်ခိုင်မာသောအုတ်မြစ်ချလိမ့်မည်။