Подтвердить что ты не робот

Php: когда использовать pthread

Я мало знаю об использовании потоков, но я смотрел в pthreads для php, и кажется очень интересным и легким, или проще, чем я думал...

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

Но как насчет Запись записей в журнале? Вкладывает в базы данных? (например, отслеживание активности пользователя) Извлечение из базы данных (можно ли возвращать данные из потока?)

Будет ли это увеличивать производительность или накладные расходы на создание потоков слишком много? (хотя я мог бы использовать рабочий бассейн, чтобы получить меньше накладных расходов, я думаю...)

Приветствуются любые советы или примеры!

4b9b3361

Ответ 1

Есть много примеров, включенных в дистрибутив и доступных на github:

https://github.com/krakjoe/pthreads/tree/master/examples

Эти примеры включают такие вещи, как пул потоков общего назначения, многопоточный сервер сокетов и SQLWorker.

Созданные потоки pthreads являются нормальными и безопасными, поскольку потоки, которые Zend сам настраивает для запросов на обслуживание через многопоточную SAPI. Они совместимы со всеми теми же функциональными возможностями, плюс все, что вы ожидаете от API нитей высокого уровня (почти).

Всегда будут существовать ограничения на реализацию потоков в недрах архитектуры общего ничего, но преимущества с точки зрения использования лучших физических ресурсов в вашем распоряжении, а также общее удобство использования PHP для любой заданной задачи намного перевешивают накладные расходы на работу вокруг этой среды.

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

Вы думаете точно по правильной линии: показатель эффективности не в количестве потоков, выполняемых вашим приложением, а в том, как эти потоки используются, чтобы наилучшим образом служить основной цели приложения. Рабочие - хорошая идея, где бы вы их ни использовали, сделайте это.

Что касается конкретных вещей, о которых вы просили, LoggingWorker - хорошая идея и будет работать, не пытайтесь обмениваться этим потоком, так как нет смысла, он будет абсолютно стабильным, если Worker откроет файл журнала или соединение с базой данных и выполняемые ею стеки, могут обращаться к ним. SQLWorker включен в примеры, опять же, еще одна хорошая идея, когда API не имеет достойного асинхронного API, или вы просто предпочитаете поток многопоточного программирования.

Вы не получите лучшего или более правильного ответа: я написал pthreads самостоятельно.