Авторские статьи Php и многопоточность

Discussion in 'Статьи' started by EXSlim, 17 Dec 2006.

  1. EXSlim

    EXSlim Elder - Старейшина

    Joined:
    9 Oct 2006
    Messages:
    73
    Likes Received:
    20
    Reputations:
    18

    Интро

    Иногда бывают ситуации, требующие быстро обработать информацию. Например, при работе с несколькими тысячами записей БД, не заставляя пользователя долго ждать. К сожалению PHP обладает небольшими возможностями при роботе с потоками, здесь козыри в руках PERL. Но именно о многопоточности в PHP мы и будем говорить.

    О многопоточности в PERL можно прочитать в статье KSURi.
    _http://forum.antichat.ru/thread28020.html


    In da work
    Для примера возьмем более привычную задачу – брут(или хттп флуд=)). Итак работать будем с сокетами. Брутить будем какой нибудь пароль в админку. Комменты и обьяснения в самом скрипте. В начале скрипта идут простые параметры. Максимальное число потоков не рекомендую ставить слишком большим =) С целью экономии памяти ограничим максимальную длину пароля. Если скрипт не требует логина - пропустите соответствующую настройку. Если вы незнаете ответа скрипта при правильном пароле, напишите в $stop_condition ответ при неправильном а в скрипте перед preg_match доставьте - "!"


    Смысл многопоточности в паралельно работающих соединениях. Их хендлеры заносятся в масив, не превышающий $threads. Отработавшие сокеты удаляются из масива освобожная место новым. Каждый считаный из словаря пасс формирует новый запрос. Следующий пасс - новый поток.
    Вместо заключения
    Естественно это не единственный способ. Скрипт полностью работоспособный, но на баги не проверял. В общем есть смысл доработать и/или модернизировать. Целью было показать один из способов увеличения скорости работы в PHP.
     
    4 people like this.
  2. Zadoxlik

    Zadoxlik рояль с сыром

    Joined:
    28 Feb 2005
    Messages:
    758
    Likes Received:
    216
    Reputations:
    257
    Бреед. Такую "многопоточность" (т.е. для неблок. сокетов) можно мутить токма функциями socket_ (если пхп собран с их поодержкой).
    Как у меня тут например:
    http://zadoxlik.info/portscan

    А вообще слишком громко назвал тему чтобы написатьв ней только такую какашку
     
    1 person likes this.
  3. EXSlim

    EXSlim Elder - Старейшина

    Joined:
    9 Oct 2006
    Messages:
    73
    Likes Received:
    20
    Reputations:
    18
    Всё нормально работает, причём намного быстрее. А насчёт "многопоточности" я и написал в интро и аутро. Если ты читал...

    Насчёт названия топика - ыыы блин, ты прав, немного не так
     
  4. Zadoxlik

    Zadoxlik рояль с сыром

    Joined:
    28 Feb 2005
    Messages:
    758
    Likes Received:
    216
    Reputations:
    257
    У тебя блокируется выполнение в момент подкючения к хосту
     
  5. EXSlim

    EXSlim Elder - Старейшина

    Joined:
    9 Oct 2006
    Messages:
    73
    Likes Received:
    20
    Reputations:
    18
    Собственно ... уже давно пользуюсь более функциональным отлаженым скриптом на основе этого. Этот же скрипт я писал по-быстрому, даже не проверил на ошибки, ведь он работает у меня более пол года. Целью было показать идею, и возможно сам скипт не отлажен.
     
  6. Gh0s7

    Gh0s7 Elder - Старейшина

    Joined:
    23 Nov 2006
    Messages:
    160
    Likes Received:
    231
    Reputations:
    242
    Гг. Серия статей про треады?
    Остались треды на питоне :)
     
  7. Morph

    Morph Пирожок с Маком

    Joined:
    13 Aug 2004
    Messages:
    790
    Likes Received:
    113
    Reputations:
    169
    Поидее на пхп вроде как вообще многопоточность не возможна так что думаю с названием переборщил ты чутка)
     
  8. KSURi

    KSURi tnega AOLPS

    Joined:
    6 Jun 2006
    Messages:
    458
    Likes Received:
    219
    Reputations:
    357
    Был уже миллион обсуждений этой темы. Доходило до холиваров Perl vs PHP.
    Но суть не в этом...
    Скрипт дает прирост скорости? - Да. Значит все нормально.
    Не стоит ругаться на его трактовку термина "многопточность". Главное что прирост есть, а термины это ***##
     
  9. EXSlim

    EXSlim Elder - Старейшина

    Joined:
    9 Oct 2006
    Messages:
    73
    Likes Received:
    20
    Reputations:
    18
    c названием да, с потоками - нет (+pcntl)
     
  10. Zadoxlik

    Zadoxlik рояль с сыром

    Joined:
    28 Feb 2005
    Messages:
    758
    Likes Received:
    216
    Reputations:
    257
    Это не потоки
     
    1 person likes this.
  11. nc.STRIEM

    nc.STRIEM Members of Antichat

    Joined:
    5 Apr 2006
    Messages:
    1,036
    Likes Received:
    347
    Reputations:
    292
    Первый раз слышу про многопоточность в Php!!!!
    чесн говоря в твоем примере ее не увидел! может ее просто не существует?? :)
     
    #11 nc.STRIEM, 18 Dec 2006
    Last edited: 18 Dec 2006
    1 person likes this.
  12. EXSlim

    EXSlim Elder - Старейшина

    Joined:
    9 Oct 2006
    Messages:
    73
    Likes Received:
    20
    Reputations:
    18
    for ($i=1; $i<7; $i++){
    $pid[$i] = pcntl_fork();
    if ($pid[$i] != -1) {do_some_job();}
    }

    а как тогда это обозвать?

    ps. я отлично понимаю что это создает 7 дочерних процесов отличающихся pid`ом но всё же....
     
    #12 EXSlim, 18 Dec 2006
    Last edited: 18 Dec 2006
  13. KPOT_f!nd

    KPOT_f!nd положенец общага

    Joined:
    25 Aug 2006
    Messages:
    1,074
    Likes Received:
    502
    Reputations:
    65
    что-то не вериться мне! В первый слышу и читаю про многопоточность в php! Знаю что над этим сейчас работают работники php!
     
    1 person likes this.
  14. Xex

    Xex Banned

    Joined:
    10 Jul 2005
    Messages:
    108
    Likes Received:
    41
    Reputations:
    7
    нее, ты нешаришь. Ты вообще понимаешь чем отличается поток от процесса?
    ВЫДЕРЖКА из статьи:
    <<<Подводя черту, закрепим: главное отличие процессов от потоков, состоит в том, что процессы изолированы друг от друга, так используют разные адресные пространства, а потоки, могут использовать одно и то же пространство (внутри процесса) при этом, выполняя действия не мешаяя друг другу. В этом и заключается удобство многопоточного программинга: разбив приложение на несколько последовательных потоков, мы можем увеличить производительность, упростить пользовательский интерфейс и добиться масштабируемости (если Ваше приложение установят на многопроцессорную систему, выполняя потоки на разных процах, ваша прога будет работать с аховой скоростью=)).
    >>>

    вот линк, если не понял:
    _http://seregaborzov.wordpress.com/2006/11/08/chem_process_otlichaetca_ot_potoka/
     
    1 person likes this.
  15. fucker"ok

    fucker"ok Elder - Старейшина

    Joined:
    21 Nov 2004
    Messages:
    580
    Likes Received:
    279
    Reputations:
    91
    Эх. Я тоже потоки с форками путал ещё совсем недавно :)
    А так ли она нужна в пхп эта многопоточность, ведь если учесть что язык орентирован на создание веб интерфесов...
    Вот её только для брутов и добавят, чтобы за 5 минут брут никадать все могли :)
     
  16. darky

    darky ♠ ♦ ♣ ♥

    Joined:
    18 May 2006
    Messages:
    1,773
    Likes Received:
    825
    Reputations:
    1,418
    2Gh0s7 на питоне это делается практически как на перле )
    threading+Queue+shed+распаралеривание потоков с помощью gil'а )
     
  17. EXSlim

    EXSlim Elder - Старейшина

    Joined:
    9 Oct 2006
    Messages:
    73
    Likes Received:
    20
    Reputations:
    18
    ты хоть сам читал это? Хех, 4 абзац сверху

    Речь идёт о статье. В примере, на самом деле 1 процесс и до 20 паралельно работающих соединений, выполяняющих одну работу.
     
  18. Xex

    Xex Banned

    Joined:
    10 Jul 2005
    Messages:
    108
    Likes Received:
    41
    Reputations:
    7
    найди официальный мануал, и прочти чем отличается поток от процесса,
    а линк я те дал, чтоб ты начал искать, и высказываение там верное.
     
  19. x-treem

    x-treem Elder - Старейшина

    Joined:
    8 Nov 2006
    Messages:
    130
    Likes Received:
    16
    Reputations:
    0
    А вот что я подумал. Если посудить по большему счёту... Многопоточность, это когда работают одновременно несколько скриптов(это конечно грубое сравнение, но всё же).
    Значит для некоторых ситуаций может подойти такой расклад.

    Скрипт будет автоматом генерить фрэймы, каждый из которых запускает скрипт с определёнными параметрами.
    Один - script.php?param1=0&param2=10
    Второй - script.php?param1=11&param2=20
    Третий - script.php?param1=21&param2=30
    и т.д.
    то есть одно окно запускает несколько скриптов одновременно.
    Конечно же данный способ не подойдёт для консольного выполнения.

    Вот вообщем моя мысля. Кто что на этот счёт думает?

    Извините если об это уже где нить писалось
     
    1 person likes this.
  20. gormet

    gormet Elder - Старейшина

    Joined:
    31 Jan 2007
    Messages:
    38
    Likes Received:
    24
    Reputations:
    23
    В Php6 будет реализация многопоточности, а то что ты написал, полный бред, ну может в некоторых случаях и это сойдет, а зачем забивать микроскопом гвозди, если есть специальные скриптовые языки подерживающие многопоточность!