Потоки в PHP?

Я создаю веб-приложение с помощью пехлеви, здесь я создаю интерфейс из того, где Усера может послать электронное письмо больше чем одному пользователю (пользователю), и он работает превосходный, но он замедляет время выполнения, из-за которого Усера ожидают слишком много "подтвержденного ответа" (который покажет после того, как электронные письма отправили.)

В Java существуют "Потоки", которыми мы можем выполнить, та задача (пошлите электронные письма), и это не замедляет остальных приложение.

Есть ли любая техника в PHP/Zend точно так же, как в Java, на который мы можем разделить наши задачи, которые могли занять время, например: отправка электронных писем.

29
задан Cœur 21 July 2018 в 17:07
поделиться

7 ответов

РЕДАКТИРОВАТЬ (спасибо @Efazati, похоже, в этом направлении есть новые разработки)

http://php.net/manual/en/book.pthreads.php
Внимание: (из здесь внизу):

pthreads был и остается экспериментом с довольно хорошими результатами. Любые его ограничения или функции могут измениться в любое время; [...]

/ EDIT

В PHP нет потоков!

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

Основная идея для отсрочки выполнения:

  • основной скрипт добавляет задания в очередь
  • скрипт cron отправляет их крошечными фрагментами

Подсказки:

  • убедитесь, что вы не отправляете электронное письмо, не удалив его из очередь (в худшем случае, если пользователь забирает спам с интервалом в 2 минуты ...)
  • убедитесь, что вы не удалили задание, не выполнив его предварительно ...
  • обработайте возврат электронной почты с помощью алгоритма оценки
41
ответ дан 28 November 2019 в 01:32
поделиться

Вы можете использовать систему очередей для отправки электронной почты и отправлять электронную почту из другой системы, которая поддерживает потоки. PHP - это всего лишь инструмент, и вам следует выбрать тот инструмент, который лучше всего подходит для вашей работы.

0
ответ дан 28 November 2019 в 01:32
поделиться

PHP не включает многопоточность как часть языка, есть несколько методов которые могут его подражать, но они не надежны.

Этот поиск Google показывает несколько возможных обходных путей

0
ответ дан 28 November 2019 в 01:32
поделиться

Начиная с PHP, в нем нет потоков. Однако для php вы можете взглянуть на этот обходной путь http://www.alternateinterior.com/2007/05/multi-threading-strategies-in-php.html

0
ответ дан 28 November 2019 в 01:32
поделиться

Остерегайтесь выполнение вилок для процесса Apache. Вы можете проявить поведение, которого не ожидаете. Если вы хотите выполнить какое-либо асинхронное выполнение, это должно быть через какой-то механизм очередей. Gearman один из них. Очередь заданий Zend Server - это еще один. У меня есть демонстрационный код на . Вы в очереди? Введение в очередь заданий сервера Zend . Cron можно использовать, но вы столкнетесь с проблемой зависимости от вашего планировщика cron для выполнения задач, тогда как асинхронные вычисления часто необходимо запускать немедленно. Использование системы очередей позволяет делать это без многопоточности.

3
ответ дан 28 November 2019 в 01:32
поделиться

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

5
ответ дан 28 November 2019 в 01:32
поделиться

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

1
ответ дан 28 November 2019 в 01:32
поделиться
Другие вопросы по тегам:

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