Рейтинг:0

Странная проблема с Pthreads. Почему происходит задержка отправки каждой новой темы, когда opcache.enable_cli отключен?

флаг jp

Итак, для контекста, я использую PHP-FPM 7.4 в Ubuntu и скомпилировал его с помощью ZTS. Затем добавил расширения Pthreads и ZSTD.

Я запускаю несколько сотен задач, и мне нужно, чтобы они как можно быстрее порождали новые процессы php, но после нескольких тестов я понял, что хотя мой скрипт выполнялся за 0,001 секунды, каждый раз, когда я создавал новый поток PHP с Pthreads, он добавлял 0,01 секунды. к уравнению, которое умножает время каждой итерации цикла на 10 .

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

Следующим логическим шагом было бы обновить код до более нового проекта Parallel, но тем временем я обнаружил кое-что любопытное: когда я включаю opcache.enable_cli в конфигурации PHP FPM, проблема почти исчезает, и большинство потоков не задерживаются!

К сожалению, это вызывает постоянные ошибки повреждения/сегментации zend_mm_heap, которые, судя по тому, что я читал, не могут быть исправлены (это либо основная проблема zend, либо pthreads), но, похоже, это хорошее начало для понимания корня проблемы. .

Кто-нибудь ?

Michael Hampton avatar
флаг cz
Многопоточный PHP был минным полем ошибок и других проблем почти столько же, сколько он существует. Вроде мало что изменилось. Лучше избегать, если это возможно.

Ответить или комментировать

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