Подтвердить что ты не робот

Php multithread

Php, на самом деле не создан для многопоточности, но у вас есть рабочий стол для работы с потоками в php.

4b9b3361

Ответ 1

Есть несколько решений, варьирующихся от "Хм, всего около OK" до "Выдувать глаза".

  • Напишите свой многопоточный код как расширение PHP. Вероятно, наиболее поддерживается, но вам нужно писать на C (или на другом языке, поддерживаемом для расширений).
  • Восстанавливает дочерние процессы в базовую ОС и считывает/записывает их ввод/вывод со стандартными файловыми дескрипторами. См. popen для одного маршрута в, или PCNTL. Разумный, и вы можете использовать PHP из командной строки.
  • Сделайте другие HTTP-запросы для себя через CURL или аналогичные, тем самым совместив с вашими веб-серверами возможности многопроцессорной обработки. Сохраняет весь ваш код "как веб-сайт", но рискует раздражать разработчиков, отслеживающих вас и ломающих большие пальцы.

Ответ 3

Проверьте библиотеку PCNTL. Это может помочь вам эмулировать поведение некоторых потоков.

Также этот класс:

"Этот класс может эмулировать выполнение программных потоков с использованием отдельного HTTP-протокола запросы к тому же script.

Он устанавливает HTTP-соединение с один и тот же веб-сервер для выполнения тот же PHP script. Он отправляет запрос передавая имя функции для выполнения и аргумент, который должен быть передан этому функция.

Запрашиваемый script выполняет некоторые код, который определяет выполнение потока запросить и называет указанные функция.

Когда запрос потока script заканчивается, возвращаемые значения вызываемого функция возвращается как сериализованная строка.

Вызывающий script может выполнять другие задач, пока выполняется поток script. Результаты могут быть собраны позже когда заканчивается нить script.

Ответ 4

Вы можете также использовать процессы, а не потоки, используя каналы или сокеты для их передачи.

Ответ 5

Многопоточность означает одновременное выполнение нескольких задач или процессов, мы можем достичь этого в php, используя следующий код, хотя нет прямого способа достижения многопоточности в php, но мы можем добиться почти одинаковых результатов следующим образом.

chdir(dirname(__FILE__));  //if you want to run this file as cron job
 for ($i = 0; $i < 2; $i += 1){
 exec("php test_1.php $i > test.txt &");
 //this will execute test_1.php and will leave this process executing in the background and will go         

 //to next iteration of the loop immediately without waiting the completion of the script in the   

 //test_1.php , $i  is passed as argument .

}

Test_1.php

$conn=mysql_connect($host,$user,$pass);
$db=mysql_select_db($db);
$i = $argv[1];  //this is the argument passed from index.php file
for($j = 0;$j<5000; $j ++)
{
mysql_query("insert  into  test   set

                id='$i',

                comment='test',

                datetime=NOW() ");

}

Это будет выполнять test_1.php два раза одновременно, и оба процесса будут выполняться в фоновом режиме одновременно, так что вы можете достичь многопоточности в php.

Этот парень сделал действительно хорошую работу Многопоточность в php (Dead link)

Ответ 6

Хотя это не лучшее решение, использование VirtualBox (которое эмулирует все ядра процессора как одно), а затем помещение PHP в ОС в VitualBox, дало мне много улучшений в производительности при вычислении некоторых больших чисел данных (хотя вы можете потерять 64-битную производительность и оперативную память). Тем не менее, он работал на то, что я хотел выполнить.

Идея состоит в том, что вы должны эмулировать ее.