လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> Asynchronous Coroutines လက်တွေ့တွင် - စွမ်းဆောင်ရည်မြင့်မားသောမက်ဆေ့ခ်ျကိုရေးရန်စနစ်တကျတည်ဆောက်ရန်လမ်းညွှန်အပြည့်အစုံ

Asynchronous Coroutines လက်တွေ့တွင် - စွမ်းဆောင်ရည်မြင့်မားသောမက်ဆေ့ခ်ျကိုရေးရန်စနစ်တကျတည်ဆောက်ရန်လမ်းညွှန်အပြည့်အစုံ

M66 2025-11-06

ပြတ်တောင်းပြတ်တောင်း coroutines ၏အယူအဆနှင့်အားသာချက်များ

အင်တာနက်စနစ်များကိုစဉ်ဆက်မပြတ်ချဲ့ထွင်ခြင်းဖြင့်မက်ဆေ့ခ်ျစီတန်းမှုသည်ဖြန့်ဝေထားသောဗိသုကာများတွင်မရှိမဖြစ်လိုအပ်သောအဓိကအစိတ်အပိုင်းဖြစ်လာသည်။ စနစ်၏တစ်ပြိုင်နက်တည်းလုပ်ဆောင်နိုင်မှုနှင့်တုန့်ပြန်မှုစွမ်းဆောင်ရည်ကိုတိုးတက်စေရန် 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 သည် ချန်နယ်တစ်ခုစီ၏စာရင်းပေးသွင်းသူများကိုမှတ်တမ်းတင်ထားသည်။ ထုတ်ဝေသော စာစောင်ကိုထုတ်ဝေသည့်အခါစနစ်သည်အပြောင်းအလဲအတွက်သက်ဆိုင်ရာ သုံးစွဲသူများ ကိုအကြောင်းကြားရန်စနစ်သည်အလိုအလျောက်ဖြစ်ပေါ်စေလိမ့်မည်။

စွမ်းဆောင်ရည် optimization နှင့် system ချဲ့ခြင်း

ယေဘူယျအားဖြင့်တစ်ပြိုင်နက်တည်းဆိုသည့်အခြေအနေများတွင်ပြတ်ပြတ်သားသားမက်ဆေ့ခ်ျကိုတန်းစီစနစ်၏စွမ်းဆောင်ရည်ကို 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 ပေါင်းစပ်မှုပေါင်းစပ်ခြင်းသည်စနစ်အားဟာ့ဒ်ဝဲကုန်ကျစရိတ်များမပေးဘဲစွမ်းဆောင်ရည်ကိုသိသိသာသာတိုးတက်စေရန်ခွင့်ပြုသည်။ ဤဖွံ့ဖြိုးတိုးတက်မှုပုံစံကိုကျွမ်းကျင်သည့်ပုံစံကိုကျွမ်းကျင်စေခြင်းသည်စွမ်းဆောင်ရည်မြင့်ဖြန့်ဝေသောစနစ်များကိုတည်ဆောက်ရန်ခိုင်မာသောအုတ်မြစ်ချလိမ့်မည်။

မကြာသေးမီ ဆောင်းပါးများ