Я мало знаю об использовании потоков, но я заглянул в pthreads для php, и это кажется очень интересным и легким, или проще, чем я думал …
Я искал примеры и просматривал документацию, но я не мог найти реальных примеров того, когда на самом деле полезно использовать потоки, конечно же, это долгие задачи, которые не зависят друг от друга, как многие запросы HTTP или возможно, отправка писем.
Но как насчет ввода записей в журнал? Вкладывает в базы данных? (например, отслеживание активности пользователя) Получение из базы данных (можно ли возвращать данные из потока?)
Будет ли это увеличивать производительность или накладные расходы на создание потоков слишком много? (хотя я мог бы использовать рабочий пул, чтобы получить меньше накладных расходов, я думаю …)
Любые советы или примеры приветствуются!
Есть много примеров, включенных в дистрибутив и доступных на github:
https://github.com/krakjoe/pthreads/tree/master/examples
Эти примеры включают такие вещи, как пул потоков общего назначения, многопоточный сервер сокетов и SQLWorker.
Создаваемые потоки pthreads являются такими же нормальными и безопасными, как потоки, которые Zend сам настраивает для запросов на обслуживание через многопоточную SAPI. Они совместимы со всеми теми же функциональными возможностями, плюс все, что вы ожидаете от API нитей высокого уровня (почти).
Всегда будут существовать ограничения на внедрение потоков в глубинах архитектуры общего ничего, но преимущества с точки зрения использования лучших физических ресурсов в вашем распоряжении, а также общая удобство использования PHP для любой заданной задачи намного превышают накладные расходы работая вокруг этой среды.
Объекты, включенные в pthreads, работают, как и любой другой объект PHP, вы можете читать, писать и выполнять свои методы из любого контекста с ссылкой на объект.
Вы думаете точно по правильной линии: показатель эффективности не в количестве потоков, выполняемых вашим приложением, а в том, как эти потоки используются, чтобы наилучшим образом служить основной цели приложения. Рабочие – хорошая идея, где бы вы их ни использовали, сделайте это.
Что касается конкретных вещей, о которых вы просили, LoggingWorker – хорошая идея и будет работать, не пытайтесь обмениваться этим потоком, поскольку нет смысла, он будет абсолютно стабилен, если Worker откроет файл журнала или соединение с базой данных и выполняемые им стекируемые документы могут обращаться к ним. SQLWorker включен в примеры, опять же, еще одна хорошая идея, когда API не имеет достойного асинхронного API, или вы просто предпочитаете поток многопоточного программирования.
Вы не получите лучшего или более правильного ответа: я написал pthreads самостоятельно.