#php #node.js #image-processing
#php #node.js #обработка изображений
Вопрос:
Мы работаем над приложением для обработки изображений. Это включает в себя применение фильтров, гауссовых и т. Д. Мы хотим сделать его высококонкурентным приложением. Это будет на нескольких одноядерных экземплярах ec2.
Поскольку обработка изображений требует больших затрат процессора, мы думаем node.js блокируется в цикле событий, поэтому думаю использовать php. Мы не можем найти никаких тестов в этой области. Любые входные данные для этого будут большим подспорьем.
Комментарии:
1. Невозможно сказать, не зная гораздо больше о том, нужно ли вам пропускать большое количество изображений, или небольшое количество больших изображений, или крошечное количество изображений, каждое из которых нуждается в масштабной обработке, или что-нибудь о соответствующей обработке. Действительно ли скорость является основным критерием? Или это скорость на единицу затрат, насколько это возможно на одном процессоре? Ваш алгоритм может иметь большее значение, чем язык. И если вам действительно нужна скорость, вам следует рассмотреть C / C .
2. Мне нужно обработать большое количество небольших изображений. Обработка заключается в преобразовании изображения в карандашный набросок (инвертирование guassianfilter и уклонение). Я надеюсь, что применение Guassian требует хорошего объема обработки. Скорость — главный критерий
3. Дань уважения великому, единственному и неповторимому Карлу Фридриху Гауссу
Ответ №1:
Это задача, связанная с процессором. Действительно хорошо оптимизированный PHP или Node, вероятно, будет работать аналогично. Параллелизм ввода-вывода не повлияет на связанные с процессором задачи на одном ядре. На многих ядрах может возникнуть проблема ввода-вывода, но на самом деле большинство платформ, включая PHP, теперь имеют эффективные стратегии параллельного ввода-вывода. Кроме того, вы, вероятно, в конечном итоге вызовете код C или C независимо.
Если вам действительно нужна (экономичная) производительность, откажитесь от одноядерного устройства, поставьте в офис несколько больших игровых компьютеров или компьютеров для майнинга биткойнов, найдите хороший способ распределения задач между машинами и способ одновременной обработки нескольких изображений на графических процессорах. Ничто из этого на самом деле не привязано к определенному языку программирования.
Комментарии:
1. обычно цикл событий nodejs блокируется, поскольку он однопоточный.
2. Да, но если существует несколько процессов или потоков PHP, они также будут заблокированы на одном процессоре. Технически узел имеет потоки webworker, которые работают одновременно, хотя они должны копировать все данные внутрь и наружу. Но обычные кластеры узлов могут обрабатывать одновременно нормально. С одним ядром все это не имеет значения.
3. Это будет зависеть от деталей вашей реализации. В зависимости от того, как именно вы это делаете, какая версия или тип PHP / Node / OS / etc., любой из них может быть быстрее. Если вы настаиваете на одном базовом периоде, то вы понятия не имеете. Вы можете обойтись несколькими виртуальными машинами или контейнерами, если каждый из них получит свое собственное виртуальное ядро. Как я уже сказал, чтобы действительно максимизировать производительность, используйте графические процессоры.
Ответ №2:
PHP не очень параллелен, и каждый запрос будет блокироваться до тех пор, пока он не будет выполнен. Узел будет в порядке, если он в основном выполняет ввод-вывод или ожидает возврата другого процесса, например, вызова convert
(ImageMagick), вместо того, чтобы выполнять какую-либо обработку самостоятельно. Чем больше ядер процессора у вас есть для выполнения фактического преобразования, тем лучше.
Ответ №3:
Для обработки изображений я рекомендую использовать PHP вместо Node.js потому что существует множество отличных PHP-пакетов, которые помогут вам легко работать с изображениями. Не беспокойтесь о производительности PHP7 или HHVM 🙂