Интро Иногда бывают ситуации, требующие быстро обработать информацию. Например, при работе с несколькими тысячами записей БД, не заставляя пользователя долго ждать. К сожалению PHP обладает небольшими возможностями при роботе с потоками, здесь козыри в руках PERL. Но именно о многопоточности в PHP мы и будем говорить. О многопоточности в PERL можно прочитать в статье KSURi. _http://forum.antichat.ru/thread28020.html In da work Для примера возьмем более привычную задачу – брут(или хттп флуд=)). Итак работать будем с сокетами. Брутить будем какой нибудь пароль в админку. Комменты и обьяснения в самом скрипте. В начале скрипта идут простые параметры. Максимальное число потоков не рекомендую ставить слишком большим =) С целью экономии памяти ограничим максимальную длину пароля. Если скрипт не требует логина - пропустите соответствующую настройку. Если вы незнаете ответа скрипта при правильном пароле, напишите в $stop_condition ответ при неправильном а в скрипте перед preg_match доставьте - "!" Смысл многопоточности в паралельно работающих соединениях. Их хендлеры заносятся в масив, не превышающий $threads. Отработавшие сокеты удаляются из масива освобожная место новым. Каждый считаный из словаря пасс формирует новый запрос. Следующий пасс - новый поток. Вместо заключения Естественно это не единственный способ. Скрипт полностью работоспособный, но на баги не проверял. В общем есть смысл доработать и/или модернизировать. Целью было показать один из способов увеличения скорости работы в PHP.
Бреед. Такую "многопоточность" (т.е. для неблок. сокетов) можно мутить токма функциями socket_ (если пхп собран с их поодержкой). Как у меня тут например: http://zadoxlik.info/portscan А вообще слишком громко назвал тему чтобы написатьв ней только такую какашку
Всё нормально работает, причём намного быстрее. А насчёт "многопоточности" я и написал в интро и аутро. Если ты читал... Насчёт названия топика - ыыы блин, ты прав, немного не так
Собственно ... уже давно пользуюсь более функциональным отлаженым скриптом на основе этого. Этот же скрипт я писал по-быстрому, даже не проверил на ошибки, ведь он работает у меня более пол года. Целью было показать идею, и возможно сам скипт не отлажен.
Поидее на пхп вроде как вообще многопоточность не возможна так что думаю с названием переборщил ты чутка)
Был уже миллион обсуждений этой темы. Доходило до холиваров Perl vs PHP. Но суть не в этом... Скрипт дает прирост скорости? - Да. Значит все нормально. Не стоит ругаться на его трактовку термина "многопточность". Главное что прирост есть, а термины это ***##
Первый раз слышу про многопоточность в Php!!!! чесн говоря в твоем примере ее не увидел! может ее просто не существует??
for ($i=1; $i<7; $i++){ $pid[$i] = pcntl_fork(); if ($pid[$i] != -1) {do_some_job();} } а как тогда это обозвать? ps. я отлично понимаю что это создает 7 дочерних процесов отличающихся pid`ом но всё же....
что-то не вериться мне! В первый слышу и читаю про многопоточность в php! Знаю что над этим сейчас работают работники php!
нее, ты нешаришь. Ты вообще понимаешь чем отличается поток от процесса? ВЫДЕРЖКА из статьи: <<<Подводя черту, закрепим: главное отличие процессов от потоков, состоит в том, что процессы изолированы друг от друга, так используют разные адресные пространства, а потоки, могут использовать одно и то же пространство (внутри процесса) при этом, выполняя действия не мешаяя друг другу. В этом и заключается удобство многопоточного программинга: разбив приложение на несколько последовательных потоков, мы можем увеличить производительность, упростить пользовательский интерфейс и добиться масштабируемости (если Ваше приложение установят на многопроцессорную систему, выполняя потоки на разных процах, ваша прога будет работать с аховой скоростью=)). >>> вот линк, если не понял: _http://seregaborzov.wordpress.com/2006/11/08/chem_process_otlichaetca_ot_potoka/
Эх. Я тоже потоки с форками путал ещё совсем недавно А так ли она нужна в пхп эта многопоточность, ведь если учесть что язык орентирован на создание веб интерфесов... Вот её только для брутов и добавят, чтобы за 5 минут брут никадать все могли
2Gh0s7 на питоне это делается практически как на перле ) threading+Queue+shed+распаралеривание потоков с помощью gil'а )
ты хоть сам читал это? Хех, 4 абзац сверху Речь идёт о статье. В примере, на самом деле 1 процесс и до 20 паралельно работающих соединений, выполяняющих одну работу.
найди официальный мануал, и прочти чем отличается поток от процесса, а линк я те дал, чтоб ты начал искать, и высказываение там верное.
А вот что я подумал. Если посудить по большему счёту... Многопоточность, это когда работают одновременно несколько скриптов(это конечно грубое сравнение, но всё же). Значит для некоторых ситуаций может подойти такой расклад. Скрипт будет автоматом генерить фрэймы, каждый из которых запускает скрипт с определёнными параметрами. Один - script.php?param1=0¶m2=10 Второй - script.php?param1=11¶m2=20 Третий - script.php?param1=21¶m2=30 и т.д. то есть одно окно запускает несколько скриптов одновременно. Конечно же данный способ не подойдёт для консольного выполнения. Вот вообщем моя мысля. Кто что на этот счёт думает? Извините если об это уже где нить писалось
В Php6 будет реализация многопоточности, а то что ты написал, полный бред, ну может в некоторых случаях и это сойдет, а зачем забивать микроскопом гвозди, если есть специальные скриптовые языки подерживающие многопоточность!