распараллелить php-скрипт для drupal
Я разрабатываю модуль Drupal, в этом модуле мне нужно выполнить в 5 раз одну и ту же часть кода, поэтому я думаю, что могу сделать это параллельно, чтобы увеличить скорость выполнения, но я не хочу использовать pcntl_fork
, я хотел бы использовать pthread
.
Теперь возникает вопрос: является ли библиотека pthread
для php такой же, как в c
?
Могу ли я реализовать потоки уровня ядра в php?
Потому что я думаю, что если php pthread является пользовательским уровнем, у меня нет никаких преимуществ, чтобы использовать его в моем случае
Благодарим за ответы
1 answers
Во-первых, некоторые фактические факты:
API pthreads облегчает многопоточность в пользовательской среде: он не создает зеленые или пользовательские потоки.
Зеленые потоки реализованы как своего рода совместная или упреждающая многозадачность в языках, виртуальные машины или среды которых недостаточно подготовлены для действительно многопоточного выполнения.
PHP подготовлен для многопоточного выполнения, у него есть правильная потоковая модель, и поэтому зеленый нити не нужны.
Pthreads в PHP не являются зелеными потоками, они реализованы с помощью потоков Posix, которые являются потоками ядра
Http://en.wikipedia.org/wiki/Green_threads
Http://en.wikipedia.org/wiki/Kernel_thread
Рассматриваемый вопрос
Я предполагаю, что вы намерены, чтобы эти потоки выполнялись внешним интерфейсом (то есть внутри веб-сервера по запросу клиента).
Я умоляю тебя не для этого; базовая математика запрещает модель выполнения, в которой запрос приводит к запланированному масштабированию X потоков.
Если часть вашего приложения требует того, что обеспечивает потоковая передача, затем отделите эту часть приложения от внешнего интерфейса (веб-сервера), полностью изолируйте ее, выполните ее как системную службу для связи с вашим внешним интерфейсом с помощью какой-либо разумной формы RPC.