Php многопоточный

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

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

  1. Напишите многопоточный код в качестве расширения PHP . Возможно, наиболее поддерживается, но вам нужно писать на C (или на другом языке, поддерживаемом для расширений).
  2. Spawn child обрабатывает базовую ОС и считывает / записывает их ввод / вывод со стандартными дескрипторами файлов. См. Popen для одного маршрута или PCNTL . Разумный, и вы можете использовать PHP из командной строки.
  3. Выполняйте другие HTTP-запросы для себя через CURL или аналогичные, тем самым объединяя свои возможности для многопроцессорной обработки ваших веб-серверов. Сохраняет весь ваш код «как веб-сайт», но рискует раздражать разработчиков, отслеживающих вас и ломающих большие пальцы.

Поскольку это лучший результат в google, php имеет новое расширение, pthreads: http://www.php.net/manual/en/book.pthreads.php специально для этого.

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

Также есть класс :

«Этот класс может эмулировать выполнение потоков программ, используя отдельные HTTP-запросы к одному и тому же сценарию.

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

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

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

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

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

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

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

Многопоточность означает одновременное выполнение нескольких задач или процессов, мы можем достичь этого в 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)