Multi-Threaded HTTP တောင်းဆိုမှုများအတွက် Libcurl ကိုအသုံးပြုသောအခါ curl_share_init () function ကိုမကြာခဏအသုံးပြုလေ့ရှိသည် ။ Libcurl ကိုယ်တိုင်သည်အလွန်စိတ်ချရသော်လည်း Curl_share_init () နှင့်ဆက်စပ်သော APIs အသုံးပြုသောအခါ၎င်းသည်အရင်းအမြစ်ယိုစိမ့်မှုသို့မဟုတ်စွမ်းဆောင်ရည်ပြ issues နာများကို ဦး တည်နေဆဲဖြစ်သည်။ ထို့ကြောင့် Valgrind ကဲ့သို့သော dynamic analysis Tools များနှင့်အတူရှာဖွေတွေ့ရှိရန်နှင့်ပိုမိုကောင်းမွန်အောင်ပြုလုပ်ရန်လိုအပ်သည်။
Valgrind သည် Linux ပတ် 0 န်းကျင်တွင် C / C ++ ပရိုဂရမ်များအတွက်သင့်တော်သောအစွမ်းထက်သောမှတ်ဉာဏ်ယိုစိမ့်မှုနှင့်စွမ်းဆောင်ရည်ယိုစိမ့်မှုကိရိယာဖြစ်သည်။ PHP extensions များကို Valgrind (သို့) Libcurl ကို အသုံးပြု. FFI ကို အသုံးပြု. FFI ကို အသုံးပြု. developer များကိုလည်းရှာဖွေတွေ့ရှိရန်ကူညီနိုင်သည်။
ဒီနေရာတွင် Multithreaded Shared Fundles သုံး. အသုံးပြုသောရိုးရှင်းသော PHP ဥပမာဖြစ်သည်။
$sh = curl_share_init();
curl_share_setopt($sh, CURLSHOPT_SHARE, CURL_LOCK_DATA_COOKIE);
curl_share_setopt($sh, CURLSHOPT_SHARE, CURL_LOCK_DATA_DNS);
$ch1 = curl_init();
curl_setopt($ch1, CURLOPT_URL, "https://m66.net/api/data1");
curl_setopt($ch1, CURLOPT_SHARE, $sh);
$ch2 = curl_init();
curl_setopt($ch2, CURLOPT_URL, "https://m66.net/api/data2");
curl_setopt($ch2, CURLOPT_SHARE, $sh);
curl_exec($ch1);
curl_exec($ch2);
curl_close($ch1);
curl_close($ch2);
// ဤမျဉ်းကြောင်းကိုလျစ်လျူရှုခြင်းသည်မျှဝေထားသောလက်ကိုင်အရင်းအမြစ်ကိုမထုတ်ပြန်ရန်ဖြစ်စေလိမ့်မည်,မှတ်ဉာဏ်ယိုစိမ့်မှုကိုဖြစ်ပေါ်စေသည်
curl_share_close($sh);
PHP (သို့) C ထုပ်သမားများတည်ဆောက်ခြင်း - PHP scripts များအတွက် Valgrind ကိုတိုက်ရိုက်မသုံးနိုင်သောကြောင့်အထက်ပါယုတ္တိဗေဒကို C ကို CIRPANT သို့ခြုံ။ ,
command ကို execute :
valgrind --leak-check=full --track-origins=yes php your_script.php
output ကိုခွဲခြမ်းစိတ်ဖြာ :
Valgind သည်အောက်ပါအချက်အလက်များကိုပြလိမ့်မည်။
==12345== 48 bytes in 1 blocks are definitely lost in loss record 1 of 10
==12345== at 0x4C2FB55: calloc (vg_replace_malloc.c:711)
==12345== by 0x5B05A3: curl_share_init (share.c:144)
==12345== by 0x10927B: zif_curl_share_init (php_curl.c:2100)
...
အထက်ပါ output သည် curl_share_init () ကို curl_share_close မှတစ်ဆင့်မှန်ကန်စွာဖြန့်ချိခြင်းနှင့် ပတ်သက်. မမှန်ကန်စွာဖြည့်ဆည်းပေးပြီးနောက်တွင်ဖော်ပြထားသောမှတ်ဉာဏ်ကပြသသည်။
မှတ်ဉာဏ်ယိုစိမ့်မှုအပြင် Valgrind သည် Call Chargin Tool ကို အသုံးပြု. function fullsuming frequeny frequenys ကို အသုံးပြု. ပြုလုပ်နိုင်သည်။
valgrind --tool=callgrind php your_script.php
ထို့နောက် LibCuL function ကိုမကြာခဏဆိုသလိုကာကွီကာလီတာ 0 န်ဆောင်မှုပေးခြင်းများကို အသုံးပြု. မည်သည့် LibCul function ကိုခေါ်ဆိုနိုင်ပြီး,
shared လက်ကိုင်ကိုအသုံးပြုပြီးနောက် curl_share_close () ကို အမြဲခေါ်ပါ။
အထူးသဖြင့်တစ်ပြိုင်နက်တည်းတစ်ပြိုင်နက်တည်းပတ် 0 န်းကျင်တွင်မလိုအပ်သောအချက်အလက်မျှဝေခြင်းကိုရှောင်ကြဉ်ပါ။
အထူးသဖြင့် PHP Long-Life Cylecle Scripts တွင်မျှဝေထားသောလက်ကိုင်များ၏အသုံးပြုမှုဘဝသံသရာကိုယူဆောင်လာသည့်စီမံခန့်ခွဲမှုစီမံခန့်ခွဲမှု,
အထူးသဖြင့်က c မြှင့်တင်မှုများသို့မဟုတ် FFI ခေါ်ဆိုမှုများပါ 0 င်သည့်အခါအွန်လိုင်းမသွားမီ Valgind ကိုမှတ်ဉာဏ်ကိုစစ်ဆေးပါ။
Valgind ၏တိကျသောရှာဖွေတွေ့ရှိမှုနှင့်အတူကျွန်ုပ်တို့သည် curl_share_init ကို အသုံးပြုသောအခါလျှို့ဝှက်မှတ်ဉာဏ်ယိုစိမ့်မှုနှင့်စွမ်းဆောင်ရည်ပြောင်ပြောင်ပြောင်ပြောင်တင်းတင်းများမရှိသေးပါ။ PHP တွင်တစ်ပြိုင်နက်တည်း http တောင်းဆိုမှုများကိုထိရောက်စွာကိုင်တွယ်ရန်လိုအပ်သည့် developer များအတွက်ဤ toolchain ကိုကျွမ်းကျင်ရန်အလွန်လိုအပ်သည်။ ကောင်းမွန်သောအရင်းအမြစ်စီမံခန့်ခွဲမှုအလေ့အကျင့်များဖြင့် Valgind ကိုအသုံးပြုခြင်းသည်စနစ်၏တည်ငြိမ်မှုနှင့်ထိန်းသိမ်းခြင်းကိုများစွာတိုးတက်စေနိုင်သည်။