Темы в PHP

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

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

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

Благодаря..

EDIT (спасибо @ Efazati, похоже, новая разработка в этом направлении)

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

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

/РЕДАКТИРОВАТЬ

Нет нитей в PHP!

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

Основная идея отложить исполнение:

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

Gotchas:

  • убедитесь, что вы не отправляете электронное письмо без удаления из очереди (в худшем случае это произойдет, если пользователь отменит спам с интервалом в 2 минуты …)
  • убедитесь, что вы не удаляете работу, не выполняя ее сначала …
  • обрабатывать отсканированную электронную почту с использованием алгоритма оценки

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

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

Существует расширение Threading, основанное на PThreads, которое выглядит многообещающим на https://github.com/krakjoe/pthreads

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

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

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

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

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