Я разработал механизм метапоиска, и одна из оптимизаций, которые я хотел бы сделать, - это параллельно обрабатывать API поиска. Представьте, что результаты получены из поисковой системы A через 0,24 секунды, SE B через 0,45 секунды и от SE C через 0,5 секунды. С другими накладными расходами метапоиска может возвращать агрегированные результаты примерно за 1,5 секунды, что является жизнеспособным. Теперь то, что я хотел бы сделать, - это отправить эти запросы параллельно, а не последовательно, как в настоящее время, и довести это время до секунды. Я исследовал exec, forking, threading и все, по разным причинам, потерпел неудачу. Теперь я потратил день или два на это, чтобы, возможно, что-то пропустил. В идеале я хотел бы реализовать это в стеке WAMP на моей машине разработки (localhost) и посмотреть о внедрении на веб-сервере Linux после этого. Любая помощь оценивается.PHP Параллельная обработка для Metasearch Engine
Давайте рассмотрим простой пример: скажем, у нас есть два файла, которые мы хотим запустить одновременно. Файл 1:
<?php
// file1.php
echo 'File 1 - Test 1'.PHP_EOL;
$sleep = mt_rand(1, 5);
echo 'Start Time: '.date("g:i:sa").PHP_EOL;
echo 'Sleep Time: '.$sleep.' seconds.'.PHP_EOL;
sleep($sleep);
echo 'Finish Time: '.date("g:i:sa").PHP_EOL;
?>
Теперь представьте, что файл два же ... идея заключается в том, что если в параллельном режиме вывода командной строки для времени должна быть такой же, к примеру:
File 1 - Test 1
Start Time: 9:30:43am
Sleep Time: 4 seconds.
Finish Time: 9:30:47am
Но могу ли я использовать exec, popen или что-то еще, я просто не могу заставить это работать на PHP!
Все знаки указывают на 'exec()' –
Давайте рассмотрим простой пример: скажем, у нас есть два файла, которые мы хотим запустить одновременно. Файл 1: Php \t // Тестовый файл 1 \t echo 'File 1 - Test 1'.PHP_EOL; \t $ sleep = mt_rand (1, 5); \t echo 'Start Time:' .date ("g: i: sa"). PHP_EOL; \t echo 'Sleep Time:. $ Sleep.' секунд 'PHP_EOL..; \t сон ($ sleep); \t echo 'Finish Time:' .date ("g: i: sa"). PHP_EOL; ?> –
@ConorRyan Проверьте обновленный ответ - я включил рабочий пример. – bbonev