လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> curl_multi_remove_handle ကိုမကြာခဏခေါ်ဆိုခြင်းအတွက်စွမ်းဆောင်ရည် optimization နည်းစနစ်များကဘာတွေလုပ်နေလဲ။

curl_multi_remove_handle ကိုမကြာခဏခေါ်ဆိုခြင်းအတွက်စွမ်းဆောင်ရည် optimization နည်းစနစ်များကဘာတွေလုပ်နေလဲ။

gitbox 2025-06-08

1 ။ curl_multi_remove_handle အလုပ်လုပ်သည်ကိုနားလည်ပါ

PHP တွင် curl_multi_ * လုပ်ဆောင်ချက်များသည် curl_multi_add_handle နှင့် curl_mamti_exec နှင့်တွဲဖက်အသုံးပြုလေ့ရှိသောတစ်ပြိုင်နက်တည်းတောင်းဆိုမှုများကိုပြုလုပ်နိုင်သည်။ လက်ကိုင်ပေါင်းများစွာသို့ curl လက်ကိုင်များကိုထည့်ရန် curl_multi_add_handle ကို အသုံးပြုသောအခါ curl_multi_remove_handle သည် တောင်းဆိုမှုပြီးဆုံးပြီးနောက်လက်ကိုင်တစ်ခုစီမှလက်ကိုင်တစ်ခုစီကိုဖယ်ရှားနိုင်သည်။

 $multiCurl = curl_multi_init();
$curlHandles = [];

// မျိုးစုံထည့်ပါcurlကိုင်တွယ်multiလက်ကိုင်၌တည်၏
for ($i = 0; $i < 5; $i++) {
    $curlHandles[$i] = curl_init("http://gitbox.net/api/data$i");
    curl_multi_add_handle($multiCurl, $curlHandles[$i]);
}

// တောင်းဆိုမှုကို execute
do {
    $status = curl_multi_exec($multiCurl, $active);
} while ($active);

// တစ်ခုချင်းစီကိုလက်ကိုင်ဖယ်ရှားပါ
foreach ($curlHandles as $ch) {
    curl_multi_remove_handle($multiCurl, $ch);
    curl_close($ch);
}

curl_multi_close($multiCurl);

အထက်ပါကုဒ်တွင် curl_multi_remove_handle မှတဆင့် curl လက်ကိုင်တစ်ခုချင်းစီကိုဖယ်ရှားပါ။ အရင်းအမြစ်များကိုမှန်ကန်စွာထုတ်ပြန်ခြင်းသည်မှန်ကန်စွာထုတ်ပြန်ခြင်းကိုမှန်ကန်စွာထုတ်ပေးသော်လည်းမကြာခဏဆိုသလို curlti_remove_handle ကို curlti_remove_Handle သည်အထူးသဖြင့်တောင်းဆိုမှုများအရေအတွက်မြင့်တက်လာသောအခါ,


2 ။ မကြာခဏ curlti_remove_handle ကို curl_multi_remove_handle က ဘာကြောင့်စွမ်းဆောင်ရည်ကိုအကျိုးသက်ရောက်တာလဲ။

Curl_multi_Remove_handle ကိုခေါ်သည့်အခါ PHP သည်အောက်ခြေရှိ Multi Multi Musti Musties ပြည်နယ်ကိုအဆင့်မြှင့်တင်ရန်လိုအပ်သည်။ ၎င်းသည်အထူးသဖြင့်တစ်ပြိုင်နက်တည်းတောင်းဆိုမှုများအရေအတွက်ကြီးမားသည့်အခါ၎င်းသည်အချိန်ကုန်သောလည်ပတ်မှုတစ်ခုဖြစ်သည်။ တောင်းဆိုမှုတစ်ခုစီပြီးဆုံးသွားသောအခါလက်ကိုင်ကိုဖယ်ရှားပြီး PHP သည် Multi-Thread ၏အခြေအနေသတင်းအချက်အလက်များကိုလုပ်ဆောင်ရန်နှင့်မွမ်းမံရန်လိုအပ်သည်။ မကြာခဏဆိုသလိုလက်ကိုင်များကိုဖယ်ရှားခြင်းသည်အောက်ပါစွမ်းဆောင်ရည်ပြ issues နာများကိုဖြစ်ပေါ်စေသည်။

  • မကြာခဏမှတ်ဉာဏ်စီမံခန့်ခွဲမှု - လက်ကိုင်များကိုဖယ်ရှားခြင်းဖြင့်မှတ်ဥာဏ်စီမံခန့်ခွဲမှုယန္တရားသည်အရင်းအမြစ်များကိုခွဲဝေချထားပေးရန်နှင့်လွှတ်ပေးရန်လိုအပ်သည်။

  • Lock နှင့် Thread ထပ်တူပြုခြင်း - curl_multi_remove_handle တွင် အပြိုင်တွင်တောင်းဆိုသည့်အခါချည်သည်ချည်ခြင်းလုပ်ငန်းများပါ 0 င်မည်ဖြစ်သည်။ မကြာခဏခေါ်ဆိုမှုများသည်ပြိုင်ဆိုင်မှုကိုသော့ခတ်ရန် ဦး ဆောင်လမ်းပြပေးနိုင်သည်။

  • Call stack ၏ရှုပ်ထွေးမှု - ခေါ်ဆိုမှုတစ်ခုစီသည်အထူးသဖြင့်တစ်ပြိုင်နက်တည်းတွင်မြင့်မားသောတစ်ပြိုင်နက်တည်းတွင်မြင့်မားသောအစုအဝေးတို့အားတိုးပွားစေသည်။

ထို့ကြောင့်ဤလုပ်ငန်းများကိုအလွယ်တကူပိုကောင်းအောင်ပြုလုပ်ခြင်းသည်စွမ်းဆောင်ရည်တိုးတက်စေရန်အတွက်အလွန်အရေးကြီးသည်, အထူးသဖြင့်တစ်ပြိုင်နက်တည်းတစ်ပြိုင်နက်တည်းတောင်းဆိုမှုများလိုအပ်သည်။


3 ။ စွမ်းဆောင်ရည် optimization ကျွမ်းကျင်မှု

3.1 ။ လက်ကိုင်များ၏သုတ်ဖယ်ရှားရေး

တောင်းဆိုမှုတစ်ခုစီပြီးဆုံးပြီးနောက်ချက်ချင်း curl_multi_remove_handle ကို ဖုန်းဆက်မည့်အစားတောင်းဆိုမှုများပြီးဆုံးပြီးနောက်လက်ကိုင်ကိုတစ်ယူနီဖောင်းကိုဖယ်ရှားနိုင်သည်။ ၎င်းသည်မကြာခဏအရင်းအမြစ်များကိုအသစ်ပြောင်းခြင်းအသစ်များကိုရှောင်ရှားနိုင်ပြီးစွမ်းဆောင်ရည်ဆုံးရှုံးမှုများကိုလျှော့ချနိုင်သည်။

 $multiCurl = curl_multi_init();
$curlHandles = [];

// မျိုးစုံထည့်ပါcurlလက်ကိုင်
for ($i = 0; $i < 5; $i++) {
    $curlHandles[$i] = curl_init("http://gitbox.net/api/data$i");
    curl_multi_add_handle($multiCurl, $curlHandles[$i]);
}

// တစ်ပြိုင်နက်တည်းတောင်းဆိုမှုများဖျော်ဖြေ
do {
    $status = curl_multi_exec($multiCurl, $active);
} while ($active);

// 统一移除所有လက်ကိုင်
foreach ($curlHandles as $ch) {
    curl_multi_remove_handle($multiCurl, $ch);
    curl_close($ch);
}

curl_multi_close($multiCurl);

တောင်းဆိုမှုများအားလုံးကိုပြီးစီးပြီးပြီးဆုံးသွားသောအခါတူညီသောလက်ကိုင်များကိုဖယ်ရှားခြင်းအားဖြင့်မလိုအပ်သောအလယ်အလတ်စစ်ဆင်ရေးများကိုလျှော့ချနိုင်ပြီးစွမ်းဆောင်ရည်ကိုတိုးတက်အောင်လုပ်နိုင်သည်။

3.2 ။ curlulti_remove_handle ကို curlulti_remove_handle ကို curlti_remove_handle ကိုလျှော့ချပါ

အချို့သောအခြေအနေများတွင်ကျွန်ုပ်တို့သည်တစ်ပြိုင်နက်တည်းတောင်းဆိုမှုများကိုပြုပြင်ခြင်းအားဖြင့် curl_multi_remove_handle ကို curl_multi_remove_handle ကို လျှော့ချနိုင်သည်။ ဥပမာအားဖြင့်, တောင်းဆိုမှုများအားလုံး၏အပြောင်းအလဲနဲ့အသုတ်, ပြီးနောက်အသုတ်ပြီးစီးအရသိန်းလုံးကိုတစ်ပုံစံတည်းဖယ်ရှားလိုက်ပါ။

 $multiCurl = curl_multi_init();
$curlHandles = [];

// တစ်ခုအပြောင်းအလဲနဲ့ယူဆ10တောင်းဆိုချက်
$batchSize = 10;

for ($i = 0; $i < 100; $i++) {
    $curlHandles[$i] = curl_init("http://gitbox.net/api/data$i");
    curl_multi_add_handle($multiCurl, $curlHandles[$i]);
    
    if (count($curlHandles) == $batchSize) {
        // တစ်ပြိုင်နက်တည်းတောင်းဆိုမှုများဖျော်ဖြေ
        do {
            $status = curl_multi_exec($multiCurl, $active);
        } while ($active);

        // 统一移除当前批次的所有လက်ကိုင်
        foreach ($curlHandles as $ch) {
            curl_multi_remove_handle($multiCurl, $ch);
            curl_close($ch);
        }

        // 清空当前批次的လက်ကိုင်数组
        $curlHandles = [];
    }
}

// ကျန်ရှိနေသေးသောတောင်းဆိုမှုများရှိနေသေးလျှင်,ဆက်လက်လုပ်ဆောင်ရန်ဆက်လက်
if (count($curlHandles) > 0) {
    do {
        $status = curl_multi_exec($multiCurl, $active);
    } while ($active);

    // 统一移除剩余လက်ကိုင်
    foreach ($curlHandles as $ch) {
        curl_multi_remove_handle($multiCurl, $ch);
        curl_close($ch);
    }
}

curl_multi_close($multiCurl);

တောင်းဆိုမှုများကိုအသုံးပြုခြင်းဖြင့်အပြည့်အစုံဖြင့် curl_multi_remove_handle ၏ခေါ်ဆိုမှုအရေအတွက်သည်အလွန်နည်းပါးခြင်း, စွမ်းဆောင်ရည်တိုးတက်အောင်လုပ်နိုင်သည်။

3.3 ။ မြဲဆက်သွယ်မှုကိုအသုံးပြုခြင်း

အချို့ဖြစ်ရပ်များတွင်သင်သည်တူညီသော API ဟုမကြာခဏခေါ်ဆိုပါက HTTP Persistent Connections (Keep-Live) ကိုဖွင့်ရန်စဉ်းစားနိုင်သည်။ ၎င်းသည် connection အသစ်တစ်ခုကိုအချိန်တိုင်းဆက်နွယ်မှုအသစ်တစ်ခုကိုတည်ဆောက်ခြင်းထက်အဆက်မပြတ်ဆက်သွယ်မှုကိုတောင်းခံရန်ကြုံတွေ့ရသည်

ဆက်သွယ်မှုအသစ်တစ်ခုကိုတောင်းဆိုမှုတစ်ခုစီအတွက် connection အသစ်တစ်ခုကိုသေချာစေရန် curlopt_forbid_euse ကို မှန်ကန်စွာ သတ်မှတ်ခြင်းဖြင့် Connection Reuse Disable လုပ်နိုင်သည်။ ချိတ်ဆက်မှုသည်မခုတ်ဘဲထားခြင်းကိုထိန်းသိမ်းခြင်းသည်များသောအားဖြင့်အထူးလိုအပ်ချက်များမရှိဘဲစွမ်းဆောင်ရည်ကိုတိုးတက်စေသည်။

 curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Connection: keep-alive',
]);

ဆက်နွယ်မှုများဆက်ရှိနေခြင်းအားဖြင့်ဆက်သွယ်မှုနှင့်ဖျက်ဆီးခြင်း၏ကြိမ်နှုန်းကိုလျှော့ချပြီးစွမ်းဆောင်ရည်တိုးတက်အောင်ပြုလုပ်သည်။

3.4 ။ ဆံပင်ကောက်ကောက်မျက်နှာပြင်ကိုအသုံးပြု။ မိခင် optimization

သင်၏တောင်းဆိုမှုအတိုးအကျယ်သည်အလွန်ကြီးမားပါက PHP ကဆံပင်ကောက်ကောက်သည်အကောင်းဆုံးရွေးချယ်မှုမဟုတ်ပါ။ ဤကိစ္စတွင်, အဆင့်မြင့် http client များကို အသုံးပြု. ခေတ်မီ http client များကို အသုံးပြု. ပိုမိုကောင်းမွန်သောစွမ်းဆောင်ရည်နှင့်မှတ်ဉာဏ်စီမံခန့်ခွဲမှုများကို အသုံးပြု. များသော အားဖြင့်ပိုမိုကောင်းမွန်သောစွမ်းဆောင်ရည်နှင့်မှတ်ဉာဏ်စီမံခန့်ခွဲမှုကဲ့သို့သောခေတ်မီ http client များကိုအသုံးပြုသည်။