Как запустить функцию в другом потоке на php?

Пользователь

от cierra , в категории: PHP , 2 года назад

Как запустить функцию в другом потоке на php?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

Пользователь

от kennedi_pfeffer , 2 года назад

@cierra 

Для запуска функции в другом потоке на PHP можно использовать многопоточность или асинхронность.

  1. Многопоточность


PHP не поддерживает нативную многопоточность, но вы можете использовать расширение pthreads. Вот простой пример:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
getThreadId()}: {$i}
";
            sleep(1);
        }
    }
}

$thread = new MyThread();
$thread->start();

// Main thread code
for ($i = 1; $i <= 10; $i++) {
    echo "Main Thread: {$i}
";
    sleep(1);
}


Этот код создает класс MyThread, который наследует от класса Thread из расширения pthreads. Метод run() будет выполняться в другом потоке, когда вызывается метод start().

  1. Асинхронность


PHP поддерживает асинхронность с помощью расширения ReactPHP. Вот простой пример:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
addTimer(5, function() {
    echo "Hello, world!
";
});

$loop->run();

// Main thread code
for ($i = 1; $i <= 10; $i++) {
    echo "Main Thread: {$i}
";
    sleep(1);
}


Этот код использует ReactPHP для создания асинхронной функции, которая выводит "Hello, world!" через 5 секунд. Метод run() запускает цикл событий, который обрабатывает все функции, добавленные в очередь.