PHP ၏လုပ်ဆောင်နေသောပတ် 0 န်းကျင်ဆိုင်ရာပြင်ဆင်မှုတွင် Thread_safe (Thread Sountain Safety) သည်မကြာခဏဖော်ပြလေ့ရှိသော်လည်းလျစ်လျူရှုထားသည့်အယူအဆတစ်ခုဖြစ်သည်။ Thread_Safe mode ကို (FISTCGI ကဲ့သို့သော IIS, Apache) သို့မဟုတ်ပေါင်းစပ်ထားသောပတ်ဝန်းကျင် (ဥပမာ IIS, Apache) သို့မဟုတ်ပေါင်းစည်းထားသောပတ်ဝန်းကျင်တွင်ပါ 0 င်သောပတ်ဝန်းကျင်သို့မဟုတ်ပေါင်းစပ်ထားသောပတ်ဝန်းကျင်တွင်ပါ 0 င်သည်။ ဤဆောင်းပါးသည် PHP ၏လုပ်ဆောင်မှုအခြေခံမူများကိုဒေတာဘေ့စ်လည်ပတ်မှုဆိုင်ရာ thread_safe mode ၏တိကျသောသက်ရောက်မှုများနှင့်အလားအလာရှိသောအကျိုးကျေးဇူးများကိုနက်နက်ရှိုင်းရှိုင်းဆန်းစစ်ရန်ပေါင်းစပ်ထားပါသည်။
Thread_Safe (သို့မဟုတ် ZTS, Zend Thread လုံခြုံမှု) သည် PHP ၏စုစည်းမှုစနစ်ဖြစ်သည်။ ဤ mode ကိုဖွင့်ထားသည့်အခါ PHP သည် Multi-threaded ပတ်ဝန်းကျင်ရှိဒေတာများအကြားကွဲပြားခြားနားမှုများကိုရှောင်ရှားရန်ကမ္ဘာလုံးဆိုင်ရာကွဲပြားခြားနားသော thread safe အရင်းအမြစ်မန်နေဂျာများအကြောင်းအရင်းအမြစ်များကိုစီမံခန့်ခွဲရန် PHP သည် Threm Safe Data Magreads (TSRM: Threm Safe Resource Manager) ကိုအသုံးပြုသည်။
လက်ရှိ PHP သည် Thread_safe Mode ကိုကြည့်ရှုရန်, ၎င်းကို script တွင်သုံးနိုင်သည်။
echo php_sapi_name();
echo PHP_ZTS ? 'Thread Safe' : 'Non Thread Safe';
သို့မဟုတ် thread ဘေးကင်းလုံခြုံမှု option ကို ဖွင့်ထား ရှိမရှိအတည်ပြုရန် Phpinfo () output ကိုစစ်ဆေးပါ။
Thread-Safe Mode တွင် Threads မျိုးစုံသည်တူညီသော database connection importance ကိုမျှဝေနိုင်သည်။ ၎င်းသည်စနစ်တကျမလည်ပတ်ပါကဆက်သွယ်မှုအရင်းအမြစ်၏အခြေအနေတွင်ရှုပ်ထွေးမှုများဖြစ်ပေါ်စေနိုင်သည်။ thread_safe mode ကိုဖွင့်ပြီးနောက်, ချည်တစ်ခုစီသည်ကိုယ်ပိုင်လွတ်လပ်သောဒေတာဘေ့စ် connection connection အရင်းအမြစ်များကိုဆက်လက်ထိန်းသိမ်းထားပြီးအရင်းအမြစ်ပြိုင်ပွဲပြ problem နာကိုရှောင်ရှားလိမ့်မည်။
$mysqli = new mysqli('localhost', 'user', 'pass', 'db');
// တည်နေ thread_safe mode မှာ,တစ်ခုချင်းစီကိုချည်၏ကိုယ်ပိုင်ရှိပါတယ် $mysqli နမူနာ
အထူးသဖြင့်တည်ငြိမ်မှုကိုသိသိသာသာတိုးတက်စေနိုင်သော MySQL, Postgresql သို့မဟုတ် Redis ကဲ့သို့သောကြိမ်နှုန်းမြင့်မားသော databases များကိုရယူသည့်အခါတစ်ပြိုင်နက်တည်းချိတ်ဆက်ထားသော databases application များအတွက်ဤအထီးကျန်မှုသည်အထူးအရေးကြီးသည်။
ဒေတာဘေ့စ်ဆက်သွယ်မှုများ, အရောင်းအဝယ်ပြည်နယ်များစသည်တို့ကိုသိုလှောင်ရန်သင်၏စီမံကိန်းတွင်သင်စီမံကိန်းတွင်ကမ္ဘာလုံးဆိုင်ရာ variable များကိုသုံးပါက,
global $db;
$db = new PDO('mysql:host=localhost;dbname=test', 'root', '');
// 非线程安全mode မှာ,ဒီ variable ကိုတောင်းဆိုမှုများစွာအားဖြင့်မျှဝေနိုင်ပါသည်,ပ conflict ိပက်ခဖြစ်စေသည်
Thread_safe Mode တွင် Thread တစ်ခုစီတွင်ကိုယ်ပိုင်လွတ်လပ်သော variable ည့်သည်တွင်ထိုကဲ့သို့သောပ conflicts ိပက်ခများကိုထိရောက်စွာရှောင်ရှားနိုင်ခဲ့သည်။
PHP-FPM သို့မဟုတ် SWOOLE Multipreaded Coroutine Mode ကဲ့သို့သောအချို့သော web server configurations များတွင် Thread-Safe PHP သည်ချည်မျှင်စည်းစနစ်နှင့်အလုပ်လုပ်ရန်ပိုမိုလွယ်ကူသည်။ ဥပမာအားဖြင့် SWOOLE \ Coroutine \ MySQL ကို သုံး. ဥပမာအားဖြင့်
go(function () {
$mysql = new Swoole\Coroutine\MySQL();
$mysql->connect([
'host' => '127.0.0.1',
'user' => 'root',
'password' => '',
'database' => 'test'
]);
$result = $mysql->query('SELECT * FROM users');
});
SWOSE ၏ Coroutine စီစဉ်ခြင်းသည်လည်ပတ်ရန်ချည်ထားသောလုံခြုံစိတ်ချရသောပတ်ဝန်းကျင်တွင်ရှိသည်။ Thread_Safe ကို IO စစ်ဆင်ရေးများတွင်မျှဝေထားသောအချက်အလက်တည်ဆောက်ပုံများကြောင့်ဖြစ်ပေါ်လာသောကြိုတင်ခန့်မှန်းထားသောအပြုအမူကိုရှောင်ရှားနိုင်သည်။
Thread_Safe သည်ပိုမိုမြင့်မားသောလုံခြုံရေးကိုဆောင်ကြဉ်းသော်လည်းစျေးနှုန်းမရှိဘဲမလာပါ။ ဒေတာများကိုကာကွယ်ရန် (ဥပမာ Mutex သော့ခတ်ခြင်း, ဖတ်ခြင်း, စာဖတ်ခြင်းစသည်တို့) ၏အသုံးပြုမှုများစွာကိုအသုံးပြုခြင်းကြောင့်အချက်အလက်များကိုကာကွယ်ရန်အတွက်အလုံးစုံစွမ်းဆောင်ရည်သည်မလုံခြုံသောဗားရှင်းထက်အနည်းငယ်နိမ့်သည်။ အမှန်တကယ်ဖြန့်ကျက်မှုတွင်သင်သည်သင်၏ဝဘ်ဆာဗာပုံစံပေါ်တွင် အခြေခံ. ရွေးချယ်သင့်သည်။
ဥပမာအားဖြင့်:
အကယ်. သင်သည် Apache ၏ 0 န်ထမ်း MPM mode (သို့) IIS ကိုသုံးပါက Multi-Threaded ပတ်ဝန်းကျင်တွင် Thread_Safe ကိုအသုံးပြုရန်အကြံပြုသည်။
အကယ်. သင်သည် Apache ၏ Prefolk MPM သို့မဟုတ် Php-FPM ကိုသုံးပါကတောင်းဆိုမှုတစ်ခုစီသည်သီးခြားဖြစ်စဉ်တစ်ခုတွင်အလုပ်လုပ်သည်။
သင်အသုံးပြုနေသော PHP Modules (ဥပမာအချို့ database extensions များကဲ့သို့) တွင်ချည်မျှင်စည်းမျဉ်းစည်းကမ်းများတွင်ချည်မျှင်တိုင်းဘေးကင်းလုံခြုံရေးပြ issues နာများရှိသည်။
Thread ရေကန်များ, ပြတ်တောင်းပြတ်တောင်းပရိုဂရမ်းမင်းသို့မဟုတ် Coroutine Fruteworks (M66.net/swolee) ကိုအသုံးပြုသော application များကိုဖြန့်ချိသောအခါ (M66.net/swolee) ကိုအသုံးပြုသောအခါ thrad_safe version php ကိုအသုံးပြုရန်အကြံပြုသည်။
ယေဘုယျအားဖြင့်ဒေသခံဖွံ့ဖြိုးရေးပတ် 0 န်းကျင်များသည်များသောအားဖြင့် Thread_Safe ကိုပိုမိုမြင့်မားသောစွမ်းဆောင်ရည်ရရှိရန်မလိုအပ်ပါ။