လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> တိကျသောတာဝန်ကိုအကောင်အထည်ဖော်ရန် Time_Nanosleep ကိုသုံးပါ

တိကျသောတာဝန်ကိုအကောင်အထည်ဖော်ရန် Time_Nanosleep ကိုသုံးပါ

gitbox 2025-05-27

Web Development တွင် PHP သည်အစဉ်အလာကိုအစဉ်အလာအရကြာမြင့်စွာပြေးနေသည့်လုပ်ငန်းစဉ်များသို့မဟုတ်လုပ်ငန်းခွင်အချိန်ဇယားစနစ်များအတွက်မသင့်တော်ဟုယူဆကြသည်။ CLI MODE အတွက်တိုးမြှင့်ခြင်းနှင့် Time_Nanosleep ကဲ့သို့သောနောက်ခံလုပ်ဆောင်ချက်အချို့ရရှိမှုသည် PHP သည် Lightweight အချို့ကိုပေါ့ပါးသော်လည်းအချိန်လိုအပ်သည်။

ဤဆောင်းပါးသည် Millisecond သို့မဟုတ် Microsecond တိကျြုံမှုနှင့်ဆိုင်သောအလုပ်များကိုပြုလုပ်ရန်ရိုးရှင်းသောလုပ်ထုံးလုပ်နည်းများကိုတည်ဆောက်ရန် Time_Nanosleep ကို မည်သို့အသုံးပြုရမည်ကိုမိတ်ဆက်ပေးမည်။

1 ။ time_nanosleep ကို အဘယ်ကြောင့်အသုံးပြုသည်

Sleep () နှင့် USLEEP ကဲ့သို့သော PHP () PHP တွင်သမားရိုးကျနှောင့်နှေးခြင်းလုပ်ငန်းများသည်ဒုတိယနှင့် microsecond နှော င့ ်နှေးမှုများကိုအသီးသီးထောက်ပံ့ပေးနိုင်သည်။

ဆန့်ကျင်ဘက်အနေဖြင့် Time_Nanosleep သည် nanosecond-level အချိန်ထိန်းချုပ်မှုကိုပေးသည်။

 bool time_nanosleep(int $seconds, int $nanoseconds): bool|array

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

2 ။ စီစဉ်သူများတည်ဆောက်ရန်အခြေခံအတွေးအခေါ်များ

အလုပ်အချိန်ဇယားဆွဲသူ၏အဓိကအကြံဥာဏ်မှာ -

  1. အလုပ်စာရင်းကိုသတ်မှတ်ပါ, အလုပ်တစ်ခုစီသည် Execution Cycle နှင့်ပါ 0 င်သည်။

  2. လက်ရှိအချိန်ကိုအဆုံးမဲ့ကွင်းဆက်တွင်ရှာဖွေပါ။

  3. လာမည့်ကွပ်မျက်သံသရာအတွက်အတိအကျစောင့်ဆိုင်း;

  4. ပစ်မှတ်အချိန်ရောက်သောအခါတာဝန်ကို run ပါ။

3 ။ နမူနာကုဒ်

ဤတွင်ရိုးရှင်းသော 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();

4 ။ မှတ်စုများ

  1. CPU Occupancy : Scheduler သည်အဆုံးမဲ့ကွင်းဆက်တစ်ခုတွင်ရှိနေသောကြောင့် CPU နေရာချထားရန်အတွက် Time_Nanosleep ကဲ့သို့သောလုပ်ဆောင်မှုများကိုအသုံးပြုရန်အကြံပြုသည်။

  2. အမှားအယွင်းပြ problem နာ : ဒီဥပမာမှာ Next_run setting ကို setting method ဟာအမှားစုဆောင်းမှုကိုပိုကောင်းတဲ့ထိန်းချုပ်မှုကို "လက်ရှိအချိန် + သံသရာကနေစ" ဖို့အသုံးပြုသည်။

  3. ခြွင်းချက်ကိုင်တွယ်ခြင်း - တကယ့်ပတ် 0 န်းကျင်တွင်အလုပ်တစ်ခုကိုအချိန်ဇယားဆွဲရန်အနှောင့်အယှက်မဖြစ်စေရန်ကြိုးစားရန်ကြိုးစားခြင်းကိုထည့်ရန်အကြံပြုသည်။

  4. လုပ်ငန်းခွဲခြမ်းစိတ်ဖြာခြင်း - အကယ်. အလုပ်တစ်ခုသည်ကြာမြင့်စွာကြာလျှင်အခြားအလုပ်များကိုကွပ်မျက်ခြင်းကိုအကျိုးသက်ရောက်နိုင်သည်။ ၎င်းသည် Paralelund ကိုအကောင်အထည်ဖော်ရန် PCNTL_Fork ကို ပိုမိုကောင်းမွန်အောင်ပြုလုပ်နိုင်သည်။

5 ။ လျှောက်လွှာဇာတ်လမ်းတစ်ပုဒ်

  • တိကျစွာအလိုအလျောက်ဒေတာထပ်တူပြုခြင်း

  • microseconds (IOF) MicroSeconds အတွက်တစ်ကြိမ်တွင်မက်ဆေ့ခ်ျများပို့ပါ။

  • PHP Local Daemon သို့မဟုတ်မဲရုံ 0 န်ဆောင်မှုကိုတည်ဆောက်ပါ

ကောက်ချက်

PHP သည် system-level အချိန်ဇယားဆွဲခြင်းအတွက်ဒီဇိုင်းမရှိသော်လည်း Time_Nanosleep ကဲ့သို့သောလုပ်ဆောင်မှုများမှတစ်ဆင့်ကျွန်ုပ်တို့သည် Lightweight Task Scheduluer ကိုမြင့်မားသောတိကျမှုနှင့်တည်ငြိမ်သောလည်ပတ်မှုဖြင့်တည်ဆောက်နိုင်ဆဲဖြစ်သည်။ သေးငယ်သော application များသို့မဟုတ် script-time စွမ်းရည်မြင့်မားရန်လိုအပ်သော script လုပ်ငန်းတာဝန်များအတွက်သင့်တော်သော်လည်းရှုပ်ထွေးသော Toolchains မိတ်ဆက်ရန်မသင့်တော်ပါ။ အနာဂတ်တွင် Coroutines နှင့် Swooles ကဲ့သို့သောချဲ့ထွင်မှုများနှင့်အတူပေါင်းစပ်ထားသော PHP ၏အချိန်ဇယားဆွဲနိုင်စွမ်းများမှာတိုးတက်ရန်နေရာများစွာရှိသည်။