Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: PHP - сложные вычисления
Форумы портала PHP.SU » Серверное администрирование » Администрирование *nix » PHP - сложные вычисления

Страниц (1): [1]
 

1. lifjeoy - 10 Декабря, 2014 - 16:44:05 - перейти к сообщению
Добрый день,

генерируем карты, много карт, большие карты. Наносим на подложку разнообразные данные, дороги, подписи и тд.

#top показывает, что процесс никогда не занимает более 1 ядра, хотя на машине их 8.
592 root 1 102 0 1079M 864M CPU0 0 10:15 95.36% php

Ввиду чего, общая задача выполняется много дольше, чем хотелось.

Есть ли возможность настроить php нужным образом?
Возможность переписать код под многопоточность рассматривается, но ищется другое возможное решение, средствами администрирования ОС.

mysql же прекрасно занимает и 100 и 200% процессорного времени.

Спасибо
2. MiksIr - 10 Декабря, 2014 - 16:47:10 - перейти к сообщению
mysql многопоточный
или переписать на треды или просто распараллелить задачи на процессы
3. esterio - 10 Декабря, 2014 - 16:53:20 - перейти к сообщению
ПХП не многопоточен и даже не многозадачен. вам ни за что не получиться разбить на два ядра. как вариант вы можете запустить n-количество воркеров, которые будуть работать на n-количестве ядер в фоне и опрашивать статус например AJAX-ом. для этого нужно будет еще дополнительно использовать менеджер задач который возьмет на себя контроль исполнения, очередь и балансировку нагрузо (как пример Gearman) и супервизор который сможет конролировать запуск и перезапуск при падении воркеров Supervisor/ так же еще есть ReactPHP http://habrahabr.ru/post/220393/. но насколько я помню он еще в стадии бета и работает только на 5.5 версии. как по мне так самый лучшый вариант переписать на ЯП более подходящем для паралельных вичислений (например Python).

http://habrahabr[dot]ru/post/179399/ также почитайте здесь. там есть и про утечки памяти в ПХП
4. Мелкий - 10 Декабря, 2014 - 16:56:00 - перейти к сообщению
lifjeoy пишет:
mysql же прекрасно занимает и 100 и 200% процессорного времени.

Суммарно - да. Но один запрос тоже только однопоточный.

lifjeoy пишет:
другое возможное решение, средствами администрирования ОС.

Найдёте - смело получайте нобелевскую премию. Все производители процессоров с руками оторвут.
Многопоточным должен быть сам алгоритм. Следовательно, код. Произвольно-взятый код невозможно распараллелить.
5. MiksIr - 10 Декабря, 2014 - 16:56:04 - перейти к сообщению
esterio пишет:
ПХП не многопоточен

php может быть многопоточным если скрипт многопоточен
http://php.net/manual/ru/book.pthreads.php
6. DeepVarvar - 10 Декабря, 2014 - 17:25:59 - перейти к сообщению
MiksIr пишет:
http://php.net/manual/ru/book.pthreads.php
Атлищна! Пойду ось на пыхе писать!
7. esterio - 10 Декабря, 2014 - 17:48:52 - перейти к сообщению
MiksIr пишет:
php может быть многопоточным если скрипт многопоточен

Шутки шутками, но было так все просто не расписивал я бы вам то что выше.
8. MiksIr - 10 Декабря, 2014 - 18:23:22 - перейти к сообщению
esterio пишет:
Шутки шутками, но было так все просто не расписивал я бы вам то что выше.

Угу, треды не тривиальная задача, факт ;)
9. OrmaJever - 10 Декабря, 2014 - 21:46:50 - перейти к сообщению
Да в php есть std::thread, да он реально работает (сам тестил), но выражение "php" и "сложные вычисления" из-за этого ближе не стали. Нужно начать с того что php это язык для динамической генерации веб страничек, куда на нём сложные вычисления делать? Если есть такая задача то разве нет денег найти программиста на питоне, джаве или чём нибудь ещё?
Нужно же совесть иметь что бы на php писать сложные вычисления.

 

Powered by ExBB FM 1.0 RC1