![]() |
Php и многопоточность
Интро Иногда бывают ситуации, требующие быстро обработать информацию. Например, при работе с несколькими тысячами записей БД, не заставляя пользователя долго ждать. К сожалению 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!!!!
чесн говоря в твоем примере ее не увидел! может ее просто не существует?? :) |
Цитата:
$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'а ) |
Цитата:
Речь идёт о статье. В примере, на самом деле 1 процесс и до 20 паралельно работающих соединений, выполяняющих одну работу. |
найди официальный мануал, и прочти чем отличается поток от процесса,
а линк я те дал, чтоб ты начал искать, и высказываение там верное. |
А вот что я подумал. Если посудить по большему счёту... Многопоточность, это когда работают одновременно несколько скриптов(это конечно грубое сравнение, но всё же).
Значит для некоторых ситуаций может подойти такой расклад. Скрипт будет автоматом генерить фрэймы, каждый из которых запускает скрипт с определёнными параметрами. Один - script.php?param1=0¶m2=10 Второй - script.php?param1=11¶m2=20 Третий - script.php?param1=21¶m2=30 и т.д. то есть одно окно запускает несколько скриптов одновременно. Конечно же данный способ не подойдёт для консольного выполнения. Вот вообщем моя мысля. Кто что на этот счёт думает? Извините если об это уже где нить писалось |
В Php6 будет реализация многопоточности, а то что ты написал, полный бред, ну может в некоторых случаях и это сойдет, а зачем забивать микроскопом гвозди, если есть специальные скриптовые языки подерживающие многопоточность!
|
Цитата:
Мля, я и не открывал эту тему. Просто изложил свою мысль по этому поводу. Это не значит что пользуюсь этим. |
это НЕ многопоточность... это многопроцессность.
многопоточность - как было сказано выше - когда 1 поток имеет доступ к памяти другого. процессы же, что ты и делаешь, имеют раздельную память, что иногда противопоказано. ЗЫ зря тему поднимал... а твой метод давно юзается. имхо это может делать и 1 скрипт, без браузера) |
| Время: 13:11 |