итд). А тут по выходным начал осваивать Go "для души".
Проходил пример с обработкой входящих данных из нескольких каналов в разных горутинах. Выглядит круто.
Возник вопрос. А как обычно в PHP, где нет аналогов горутин из коробки?
Так то в курсе про варианты реализации многопоточности и параллельности в PHP, но это, скорее, исключение, которое редко где используется.
Т.е. скрипты на PHP же служат и онлайн-чатиками, работающими в реал-тайме и как то разбирают эффективно очереди, и получают данные из нескольких мест одновременно.
Но я никогда не сталкивался с такими задачами и навскидку не пойму, а как же быть в таких случаях? Навскидку вижу вариант с запуском нескольких PHP-демонов одновременно (по одному на разбор прилетающих данных из каждого источника). Но это выглядит костылем и наверняка высоконагруженные проекты работаю по другому принципу.
Расскажите, пожалуйста, по "какому" такому принципу? Не обязательно текстом. Буду рад ссылке на видео/статью итд
в пыхе используются очереди для распараллеливания задач
A если в очередь (Rabbitmq тот же) прилетает 10 задач в секунду, а обрабатывается в одном потоке только 5 задач в секунду, выходит, что для повышения производительности нужно запускать отдельные инстансы PHP?
что ты подразумеваешь под "отдельные инстансы PHP" ?
Несколько экземпляров (несвязанных друг с другом) запусков скрипта в PHP. Образно говоря, как если бы мы запускали по отдельному окну программы Word для каждой страницы текстового файла.
да, дополнительные воркеры нужно запускать
а для чего по твоему , настраивают nginx+php-fpm , что есть php-fpm ? какая разница между асинхронностью, параллельностью ... как обрабатываются два одинаковых запроса на сайте от двух разных юзеров в одно время ?
И при этом, я правильно понял, что основной плюс горутин (или аналогов в других многопоточных языках) в том, что в PHP, например, мы дожны заранее прикинуть на глаз, сколько воркеров нужно иметь (запустим слишком мало воркеров - не будут успевать обработать данные и очередь переполнится), запустим слишком много воркеров - часть из них будет простаивать и потреблять память в холостую. А с горутинами мы можем регулировать их количество динамически по ходу разбора очередей?
Да, с асинхронностью, параллельностью итд знаком - в НИИ на GRID-системах довелось поработать. Вопрос мой, скорее, в области конкретного варианта реализации на PHP задачи, решение которой описал в контексте Golang.
Нужно смотреть конкретное расширение для работы с очередями. В ларе есть Horizon, он по-моему умеет динамически добавлять-убавлять воркеры, но это неточно
посмотри видео где описывается работа roadrunner. поиском по ютубу проще найти
роадраннер даёт неумирающий пхп, не изменяя других принципов
Спасибо за инфу! Смысл понял. Выходит, что распараллелить обработку разбора очереди можно без проблем на PHP, другое дело, что каждый обработчик займет отдельный процесс и станет от этого более тяжеловесным, чем спец. инструменты для этой цели в Go (и аналогах) + потребуется поставить немного доп пакетов, а не ограничиться лишь возможностями языка из коробки.
Да много всяких библиотек есть. В swoole есть корутины, как в go.
корутина - какое-то дурацкое слово есть же исконно посконное - копрограмма
Хз, там оно так называется.
Обсуждают сегодня