Производство фотообоев в Новосибирске. Интернет магазин фотообоев. Изготовление - один день! Каталог 10 000 изображений!
2 Август 2007

Многопоточность в PHP

posted in Программирование |

При написании скриптов-парсеров все рано или поздно приходят к вопросу о многопоточной реализации оных.

Я не стал исключением и изучил довольно много информации по данному вопросу и пришел к выводу — нужно реализовывать на неблокируемых сокетах (мультикурл мне не понравился тем, что он может обрабатывать только пачками, т.е. при обработке 100 урлов на конечном этапе имеем снижение производительности — допустим 98 уже обработалось и вся система ждет обработку каких то 2х тормозных урлов, в конечном итоге теряя время).

Плотно пошарив в инете нашёл таки класс AunoAsyncHttp, на котором в дальнейшем я и выстраивал все свои многопоточные скрипты.

Кому интересны дебаты на счёт многопоточности вот пару интересных тем с умакс-форума:

На всякий случай выложу его на своем хостинге (а то мало ли) — AunoAsyncHttp

На этом всё — enjoy.

И ещё — PHP программистам: очень хотелось бы почитать в комментах ваше мнение о данном классе! Какую реализацию многопоточности в PHP используете Вы ?

У нас 9 комментариев на запись “Многопоточность в PHP”

Почему бы Вам не высказать своем мнение! Позвольте нам узнать, что Вы думаете...

  1. 1 On 03.08.2007, veHab13 said:

    ну не многопоточность а асинхронные неблокируемые, зачем придумывать…

    а вообще я раньше смотрел на сокет селект, но после прочтения -A d u l t-а стало ясно что проще и надежнее через циклы с проверками на сосотояния и ошибками

    а вообще класс так и построен почти — как мне показалось на первый взгляд — не полная обработка ошибок — но если все работает всегда без сбоев — то я наверное ошибся

  2. 2 On 17.08.2007, alexf2000 said:

    Для чего нужна многопоточность? Если для загрузки чего либо из интернета, то тут основная проблема в том, что соединение может зависнуть
    в любом самом неожиданном месте, например при резолве хоста. То есть загнётся и мультикурл и этот класс и любой другой способ, в котором
    ВСЕ операции, влючая резолв не разнесены по разным потокам. То есть для устойчивой многопоточности, надо гарантировать, что ни один поток
    не заткнётся или заткнувшись не остановит все остальные. Я делаю так — открываю много соединений сам с собой, просто дёргаю тот же скрипт
    с нужными параметрами, а этот скрипт видя что его об этом просят — скачивает требуемые урлы и отдаёт их главному потоку. Шансов что сервер
    сам до себя не сможет достучаться немного, а если зависнет какой-то из вспомогательных потоков — это не так страшно. 🙂 Этот подход работат
    почти на любых хостингах, но за универсальность приходится платить — способ ресурсоёмкий. Если можно запускать консольные команды, то можно
    модифицировать способ — вместо того чтобы открывать соединение сам с собой, запустить кучу пхп процессов. Правда не знаю что будет, если
    часть процессов будет зависать, очистит ли их линукс автоматически или они тыщами будут сидеть в памяти.

  3. 3 On 13.02.2008, Николай said:

    Как я понял этот класс не может выполнять POST запросы?

  4. 4 On 13.02.2008, GTAlex said:

    в исходном виде нет, модифицируй под себя — и будет 🙂

  5. 5 On 05.07.2008, Alexk said:

    к проблеме многопоточности я подошёл с другой стороны — использовал AJAX и асинхронные запросы.

  6. 6 On 30.01.2009, Avatar said:

    Пора изучать Php

  7. 7 On 09.04.2009, bb said:

    Alexk, хотелось бы услышать более развернутый ответ на счет многопоточности и Ajax’а.
    Может статейку напишешь? Или где почитать можно про это…

  8. 8 On 09.04.2009, Always last said:

    Самое обсуждаемое на блогах:
    "Цветная революция" в Молдавии
    Песах
    Международный день цыган

  9. 9 On 15.02.2010, Pavel said:

    Использую курл, стрим-функции, сокеты, форк. Про все это подробно рассказано здесь http://job-interview.ru/articles/post/62 Есть еще расширение для пхп, написанное на С, но с ним не работал, хотя говорят, что потоки там хорошо реализованы.

Оставить комментарий