EDIT: Чтобы уточнить и упростить: я ищу «хороший» способ отправить больше объектов Stackable в Pool каждый раз, когда Stackable заканчивается (используя данные из этого первого Stackable, чтобы добавить второй) , У меня есть идеи опроса объектов до тех пор, пока они не закончится (неэффективны и некрасивы) и передадут ссылки на объект Pool (я не смог заставить его работать). Базовый код это один: https://github.com/krakjoe/pthreads/blob/master/examples/Pooling.phpPHP Пул по пул
Теперь, полное описание:
Я работаю над приложением в PHP, которая выросла слишком много и занимает много времени. Из-за этого я пытаюсь использовать многопоточность этого приложения, используя пул потоков (я знаю, что PHP не самый лучший вариант, но я не хочу и не могу изменить язык на данном этапе).
Проблема заключается в том, что есть две стадии приложения, которые должны идти в порядке, и у каждого из них есть много подзадач, которые могут идти одновременно. Итак, это процесс в моей голове:
- На этапе 1 будут подзадача N, эти подзадачи будут Stackable objects.
- Когда заканчивается подзадача i, необходимо уведомлять «основное» (то, которое создает пул, стеки и т. Д.), И выполнить этап 2 для подзадачи i с некоторыми данными из подзадачи i (другой объект Stackable). На этом этапе будут подзадачи M для каждой из подзадач этапа 1.
Я хотел бы использовать тот же пул потоков для потоков на этапах 1 и 2, и единственное решение, для перехода с этапа 1 на этап 2 выполняется опрос каждой из подзадач N до тех пор, пока один из них не закончится, а затем вызовите этап 2 для завершаемого и повторите до тех пор, пока все подзадачи N не закончится.
Я использую пример пула потоков, включенный в источник pthreads Джо Уоткинсом в качестве базового кода.
* "PHP не лучший вариант" * является своего рода занижение. –
Я не понимал, что PHP стал [потокобезопасным] (http://stackoverflow.com/questions/681081/is-php-thread-safe). –
Я ищу способ перехода от этапа 1 к этапу 2 – markmb