Многопоточность в PHP

Попробуйте переключить ['event_name'] и [i] в ​​операторе if

6
задан Thomaschaaf 26 February 2009 в 14:22
поделиться

6 ответов

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

[редактирование] я просто нашел страницу, объясняющую, почему mod_php не может разветвиться. В основном это - проблема безопасности. [/редактирование]

7
ответ дан 8 December 2019 в 13:03
поделиться

Единственный возможный способ иметь код php, выполняющийся в нескольких потоках, состоит в том, чтобы выполнить php как модуль потокового веб-сервера, который бесполезен, потому что потоки полностью изолируются, и Ваш код не имеет никакого контроля над ними. Насколько я знаю, pcntl только справляется с процессами, не потоками.

2
ответ дан 8 December 2019 в 13:03
поделиться

Это не управление потоком, это - управление процессом. Библиотека для потоков является pthreads (потоки POSIX), и она не включена в PHP, таким образом, нет никаких функций многопоточности в PHP.

С многопроцессорной обработки Вы не можете использовать это в mod_php, поскольку это было бы гигантской дырой в системе безопасности (порожденный процесс будет иметь полномочия всего веб-сервера).

4
ответ дан 8 December 2019 в 13:03
поделиться

Если бы я должен был сделать руководство crontab выполнение и т.п. от PHP, то я, вероятно, использовал бы очередь. Имейте таблицу базы данных, к которой Вы добавляете задания. Другой процесс, или от крона или работающий как демон, выполняет задания, как они обнаруживаются.

Другой способ сделать это состоит в том, чтобы настроить отдельный сценарий и сделать HTTP ДОБИРАЕТСЯ до него. Это не совсем распараллеливает, но это - один способ окружить к другой команде в PHP.

Например, если я хотел работать /usr/bin/somescript.sh по требованию у меня был бы a somescript.php это сделало системный вызов. Это было бы на виртуальном хосте, только доступном от localhost.

Я сделал бы вызов сокета к веб-серверу и ПОЛУЧИЛ бы сценарий. Ключ не должен читать на сокете, таким образом, он не блокируется. Если я хотел проверить возвращаемое значение somescript.php, Я сделал бы это позже в моем основном сценарии для предотвращения блокирования.

Если somescript.php занимает много времени для выполнения (дольше, чем сценарий выполнения вызова), необходимо будет сделать некоторое волшебство мешать апачу уничтожить сценарий, когда сокет закрывается.

2
ответ дан 8 December 2019 в 13:03
поделиться

Мультиплатформенный механизм многопоточности PHP http://anton.vedeshin.com/articles/lightweight-and-multiplatform-php-multithreading-engine

2
ответ дан 8 December 2019 в 13:03
поделиться

Примеры многопоточности, работающей в PHP (с выдержками из их страницы проекта):

По состоянию на 25 октября 2011 года этот модуль «подошел к концу» и является устаревшим в пользу таких проектов, как Elysia Cron ]. Этот модуль не был полностью бесполезным, поскольку основной патч, вдохновленный Cron MT, был привязан к D7.

... обеспечивает кэширование статических страниц для Drupal, что позволяет значительно повысить производительность и масштабируемость сайтов, которые получают в основном анонимный трафик. Для виртуального хостинга это лучший вариант с точки зрения повышения производительности. На выделенных серверах вы можете использовать Varnish.

1
ответ дан 8 December 2019 в 13:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: