Web Development တွင် PHP သည်အစဉ်အလာကိုအစဉ်အလာအရကြာမြင့်စွာပြေးနေသည့်လုပ်ငန်းစဉ်များသို့မဟုတ်လုပ်ငန်းခွင်အချိန်ဇယားစနစ်များအတွက်မသင့်တော်ဟုယူဆကြသည်။ CLI MODE အတွက်တိုးမြှင့်ခြင်းနှင့် Time_Nanosleep ကဲ့သို့သောနောက်ခံလုပ်ဆောင်ချက်အချို့ရရှိမှုသည် PHP သည် Lightweight အချို့ကိုပေါ့ပါးသော်လည်းအချိန်လိုအပ်သည်။
ဤဆောင်းပါးသည် Millisecond သို့မဟုတ် Microsecond တိကျြုံမှုနှင့်ဆိုင်သောအလုပ်များကိုပြုလုပ်ရန်ရိုးရှင်းသောလုပ်ထုံးလုပ်နည်းများကိုတည်ဆောက်ရန် Time_Nanosleep ကို မည်သို့အသုံးပြုရမည်ကိုမိတ်ဆက်ပေးမည်။
Sleep () နှင့် USLEEP ကဲ့သို့သော PHP () PHP တွင်သမားရိုးကျနှောင့်နှေးခြင်းလုပ်ငန်းများသည်ဒုတိယနှင့် microsecond နှော င့ ်နှေးမှုများကိုအသီးသီးထောက်ပံ့ပေးနိုင်သည်။
ဆန့်ကျင်ဘက်အနေဖြင့် Time_Nanosleep သည် nanosecond-level အချိန်ထိန်းချုပ်မှုကိုပေးသည်။
bool time_nanosleep(int $seconds, int $nanoseconds): bool|array
၎င်းသည်အချိန်နှင့်တပြေးညီအချိန်နှင့်တပြေးညီအချိန်နီးပြီဖြစ်သည့်အချိန်ဇယားတစ်ခုစီ၏အချိန်ကာလတစ်ခုစီ၏အချိန်ကိုထိန်းချုပ်ရန်ကျွန်ုပ်တို့အားခွင့်ပြုသည်။
အလုပ်အချိန်ဇယားဆွဲသူ၏အဓိကအကြံဥာဏ်မှာ -
အလုပ်စာရင်းကိုသတ်မှတ်ပါ, အလုပ်တစ်ခုစီသည် Execution Cycle နှင့်ပါ 0 င်သည်။
လက်ရှိအချိန်ကိုအဆုံးမဲ့ကွင်းဆက်တွင်ရှာဖွေပါ။
လာမည့်ကွပ်မျက်သံသရာအတွက်အတိအကျစောင့်ဆိုင်း;
ပစ်မှတ်အချိန်ရောက်သောအခါတာဝန်ကို run ပါ။
ဤတွင်ရိုးရှင်းသော PHP scheduler ၏ဥပမာအားဖြင့်ဥပမာတစ်ခု၏ဥပမာတစ်ခုမှာ -
<?php
class TaskScheduler
{
private array $tasks = [];
public function addTask(callable $task, float $interval): void
{
$this->tasks[] = [
'callback' => $task,
'interval' => $interval, // တခု:စက်ဏန့်,ထောက်ခံမှုဒ decimal မ
'next_run' => microtime(true) + $interval
];
}
public function run(): void
{
while (true) {
$now = microtime(true);
foreach ($this->tasks as &$task) {
if ($now >= $task['next_run']) {
call_user_func($task['callback']);
$task['next_run'] = $now + $task['interval'];
}
}
// တိကျသောစောင့်ဆိုင်း 1 毫စက်ဏန့်,ရေှာင်ရှားCPUအလွန်မြင့်မားသောထေို
time_nanosleep(0, 1_000_000);
}
}
}
// နမူနာ:တိုင်း0.5စက်ဏန့်输出一次时间戳
$scheduler = new TaskScheduler();
$scheduler->addTask(function () {
echo "Task Execute Time:" . date('Y-m-d H:i:s.u') . PHP_EOL;
}, 0.5);
// နမူနာ:တိုင်း2စက်ဏန့်执行一次Simulation တောင်းဆိုမှု
$scheduler->addTask(function () {
$url = "https://gitbox.net/api/ping";
echo "တောင်းဆိုရန် $url" . PHP_EOL;
// သင်အမှန်တကယ်အခြေအနေများတွင်အသုံးပြုနိုင်သည် curl သို့မဟုတ် file_get_contents Simulation တောင်းဆိုမှု
}, 2.0);
// scheduler စတင်ပါ
$scheduler->run();
CPU Occupancy : Scheduler သည်အဆုံးမဲ့ကွင်းဆက်တစ်ခုတွင်ရှိနေသောကြောင့် CPU နေရာချထားရန်အတွက် Time_Nanosleep ကဲ့သို့သောလုပ်ဆောင်မှုများကိုအသုံးပြုရန်အကြံပြုသည်။
အမှားအယွင်းပြ problem နာ : ဒီဥပမာမှာ Next_run setting ကို setting method ဟာအမှားစုဆောင်းမှုကိုပိုကောင်းတဲ့ထိန်းချုပ်မှုကို "လက်ရှိအချိန် + သံသရာကနေစ" ဖို့အသုံးပြုသည်။
ခြွင်းချက်ကိုင်တွယ်ခြင်း - တကယ့်ပတ် 0 န်းကျင်တွင်အလုပ်တစ်ခုကိုအချိန်ဇယားဆွဲရန်အနှောင့်အယှက်မဖြစ်စေရန်ကြိုးစားရန်ကြိုးစားခြင်းကိုထည့်ရန်အကြံပြုသည်။
လုပ်ငန်းခွဲခြမ်းစိတ်ဖြာခြင်း - အကယ်. အလုပ်တစ်ခုသည်ကြာမြင့်စွာကြာလျှင်အခြားအလုပ်များကိုကွပ်မျက်ခြင်းကိုအကျိုးသက်ရောက်နိုင်သည်။ ၎င်းသည် Paralelund ကိုအကောင်အထည်ဖော်ရန် PCNTL_Fork ကို ပိုမိုကောင်းမွန်အောင်ပြုလုပ်နိုင်သည်။
တိကျစွာအလိုအလျောက်ဒေတာထပ်တူပြုခြင်း
microseconds (IOF) MicroSeconds အတွက်တစ်ကြိမ်တွင်မက်ဆေ့ခ်ျများပို့ပါ။
PHP Local Daemon သို့မဟုတ်မဲရုံ 0 န်ဆောင်မှုကိုတည်ဆောက်ပါ
PHP သည် system-level အချိန်ဇယားဆွဲခြင်းအတွက်ဒီဇိုင်းမရှိသော်လည်း Time_Nanosleep ကဲ့သို့သောလုပ်ဆောင်မှုများမှတစ်ဆင့်ကျွန်ုပ်တို့သည် Lightweight Task Scheduluer ကိုမြင့်မားသောတိကျမှုနှင့်တည်ငြိမ်သောလည်ပတ်မှုဖြင့်တည်ဆောက်နိုင်ဆဲဖြစ်သည်။ သေးငယ်သော application များသို့မဟုတ် script-time စွမ်းရည်မြင့်မားရန်လိုအပ်သော script လုပ်ငန်းတာဝန်များအတွက်သင့်တော်သော်လည်းရှုပ်ထွေးသော Toolchains မိတ်ဆက်ရန်မသင့်တော်ပါ။ အနာဂတ်တွင် Coroutines နှင့် Swooles ကဲ့သို့သောချဲ့ထွင်မှုများနှင့်အတူပေါင်းစပ်ထားသော PHP ၏အချိန်ဇယားဆွဲနိုင်စွမ်းများမှာတိုးတက်ရန်နေရာများစွာရှိသည်။