РЕДАКТИРОВАТЬ: Чтобы уточнить и упростить: я ищу «хороший» способ отправлять больше объектов Stackable в пул всякий раз, когда Stackable заканчивается (используя данные из этого первого Stackable для добавления второго). У меня есть идеи опроса объектов до тех пор, пока один из них не закончится (неэффективный и уродливый), и передачи ссылок на объект Pool (я не смог заставить его работать). Базовый код следующий: https://github.com/krakjoe/pthreads/blob/master/examples/Pooling.php
А теперь полное описание:
Я работаю над приложением на PHP, которое сильно разрослось и требует много времени. Из-за этого я пытаюсь выполнить многопоточность этого приложения, используя пул потоков (я знаю, что PHP - не лучший вариант, но я не хочу и не могу менять язык на данном этапе).
Проблема в том, что есть 2 этапа приложения, которые должны выполняться по порядку, и на каждом из них есть множество подзадач, которые могут выполняться одновременно. Итак, это процесс в моей голове:
- На этапе 1 будет N подзадач, эти подзадачи будут объектами Stackable.
- Когда подзадача i завершается, «основная» (та, которая создает пул, Stackables и т. Д.) Должна быть уведомлена и выполнить этап 2 для подзадачи i с некоторыми данными из подзадачи i (другой объект Stackable). На этом этапе будет M подзадач для каждой из подзадач этапа 1.
Я хотел бы использовать один и тот же пул потоков для потоков на этапе 1 и этапе 2, и единственное решение, которое я могу придумать для перехода от этапа 1 к этапу 2, - это опрос каждой из N подзадач, пока одна из них не завершится, а затем вызвать этап 2 для той, которая закончилась, и повторять, пока не закончатся все N подзадач.
Я использую в качестве базового кода пример пула потоков, включенного в исходный код pthreads, Джо Уоткинс.