-
Доброе время суток, возник вопрос для спецов в php и администрировании. Есть скрипт -- делает всякие выборки из мускул базы и создает файлики. Я бы хотел его сильно распараллелить. Есть мощный ксеон хочу пустить этот скрипт в n потоков так как друг от друга они не зависят. Вопрос -- как лучше сэмулировать многопоточность в пхп? Просто запусков 10 процессов фоном или лучше с помощью сокетов. Важно, именно с позиции скорости, как будет быстрее) Мб разницы особой вообще нет?
-
Что значит "с помощью сокетов" ? Скрипт из командной строки запускается или mod_php ?
-
Ну во всех статьях в которых освещается проблема многопоточности в пхп, приводят в пример реализацию на неблокируемых сокетах. Я пытаюсь выяснить быстрее ли это чем просто n копий процесса пустить. Скрипт пускается по крону
-
-
2wicked, спасибо, если можно чуть подробнее о преимуществах перед 2мя указанными способами
-
Просто запускать несколько экземпляров, зачем тут fork ? Лишние проблемы с отслеживанием детей и их количества.
Сокеты это не реализация многопоточности, просто работа с сокетами (прием передача информации) может выполняться паралельно. Но к деланию всяких выборок и создаванию файликов в несколько потоков они отношения не имеют и помочь наверное не смогут.
-
Спасибо, Максим. Я просто чего боюсь, пишут что при запуске параллельных процессов очень жестоко тратится память 15мб на каждый процесс, с другой стороны у меня и так там выборки некислые происходят, так что думаю выделенная память будет использована в любом случае...
-
да, память тратится, если это действительно будет критично, то надо стоит посмотреть в сторону fork
Но при этом надо учитывать, что память чаще всего тратится из-за не очень экономного ее расхода в скрипте и правильно написанный скрипт сэкономит на порядки больше чем система при fork`ах И второе - неправильно написанный механизм fork`ов может привести к большим проблемам, надо четко понимать его работу как с точки зрения ОС, так и особенности применительно к PHP
-
ок, наверно стоит пооптимизировать скрипт и взять серв с 8гигами) Спасибо за помощь!
|