PDA

Просмотр полной версии : Многопоточность в Php


St__one
30.09.2006, 14:38
Тут идея пришал одна по релазации многопоточности в php путём клона кода

<?php
echo "hello";
echo '<html>...ect';

<?php
$go = $_POST['go']; //пуск
$potok = $_POST['potok']; //сколько потоков
$numberscript = n; // номер скрипта
$a = $potok - $numberscript;
if(!$go, $a >= 0)
{
echo "ok";// любой код при работе с массивами можно прибавить $numberscript таким образом разбив задачу на потоки
}
?>

<?php
$go = $_POST['go']; //пуск
$potok = $_POST['potok']; //сколько потоков
$numberscript = n; // номер скрипта
$a = $potok - $numberscript;
if(!$go, $a >= 0)
{
echo "ok";// любой код при работе с массивами можно прибавить $numberscript таким образом разбив задачу на потоки
}
?>

<?php
$go = $_POST['go']; //пуск
$potok = $_POST['potok']; //сколько потоков
$numberscript = n; // номер скрипта
$a = $potok - $numberscript;
if(!$go, $a >= 0)
{
echo "ok";// любой код при работе с массивами можно прибавить $numberscript таким образом разбив задачу на потоки
}
?>

...........

<?php
$go = $_POST['go']; //пуск
$potok = $_POST['potok']; //сколько потоков
$numberscript = n; // номер скрипта
$a = $potok - $numberscript;
if(!$go, $a >= 0)
{
echo "ok";// любой код при работе с массивами можно прибавить $numberscript таким образом разбив задачу на потоки
}
?>


Сделал небольшой набросочек
ИМХО должно работать???!!!

nerezus
30.09.2006, 15:37
Костыль на костыле костылем погоняет.

Зачем нужна многопоточность на пхп? Всякие бруты и т.д.? Тогда зачем ПХП? Питон в лапы(или перл для извращенцев) и вперед на мины. Ибо уже куча модулей.

А тем, кто не хочет учить питон, предлагаю курить доки про форки.

ZaCo
30.09.2006, 15:42
2St__one вы норкоман?

St__one
30.09.2006, 18:53
2nerezus: Я же написал на многопоточность на php... Конечно согласен, что реализация путем клонирования кода не самая лучшая...

Для чего надо??? Например: написать сокс чекер на php в потоков 50-100

2ZaCo: Нет не наркоман

ZaCo
30.09.2006, 19:36
2St__one 1) у тебя в коде вложенные конструкции начала пхп-кода 2) я не пойму ка кты решил этим делать многопоточность... с таким же успехом можно позапускать несколько копий пхп. а тут у тебя код последовательно выполняется. или я дурак. какой n?? я не понимаю

nerezus
30.09.2006, 19:40
Для чего надо??? Например: написать сокс чекер на php в потоков 50-100 форком

Ch3ck
30.09.2006, 19:44
Хм, чё-то так много написал... а разве нельзя было в цикл поставить. тоже самое было бы.

fucker"ok
30.09.2006, 19:52
А мне проще 5 раз скрипт запустить. Вот вам и многопаточность :d

St__one
30.09.2006, 20:50
2ZaCo: не закрыл, торопился это лишь набросок, чтобы понять мысль
n это номер скрипта(0, 1, 2 .... так далее) )))

2Dr.Check: цикл будте выполняться послелодвательно

2fucker"ok: а 100 проще?

KSURi
30.09.2006, 21:01
http://www.stableversion.com/2006/04/17/multithread-php/
вот тебе нормальная "многопоточность", хватит извращаться

ZaCo
30.09.2006, 21:40
2KSURi это еще хуже :)
2St__one полный бред понимаешь?

Pochka
30.09.2006, 22:01
2KSURi это еще хуже :)
Кто тебе поведал? Конечно неблокирующим вводом\выводом в т.ч. в/из сокетов многопоточность в полном смысле слова заменить нельзя, но для подавляющего большинства всех задач, которые захотят решать местные Хакеры этого будет вполне достаточно

nerezus
30.09.2006, 22:18
2KSURi это еще хуже +1, такого бреда давно не видел )

off
30.09.2006, 22:38
На каком – то сайте видел вот такой пример «многопоточности». Тут естественно идёт симуляция, т.к. в php многопоточности нет. Пример никогда не использовал, т.к. так и не встретился с задачей в которой это хоть чем то помогло.


config.php

// путь, где расположены скрипты
$path = http://domain.com/path/;

// число потоков
$max_threads = 20;



launcher.php

require_once(”config.php”);

// инициализация

$sockets = array();
$done = false;

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

$keywords = fopen(”keywords.txt”, “r”);

// приступаем к многопоточной работе

while (!$done)
{
// если обнаружен файл,
// то прекращаем выполнение скрипта

if (file_exists(”stop-file”))
die;

// если число запущенных потоков меньше
// разрешенного максимума
// то запускаем потоки еще

if ($max_threads > count($sockets))
{

if (!feof($keywords))
{
$buffer = array();

// читаем ключевое слово
// в реальности в этот массив можно
// положить очень много всего
// а не только одно ключевое слово…

$buffer[] = trim(fgets($keywords));

// задаем данные для запуска сокета
// request.php - это тот файл,
// которые делает “дело”

$query_url = $path . “request.php”;
$url_info = parse_url($query_url);

$url_info[port] = ($url_info[port]) ? $url_info[port] : 80;
$url_info[path] = ($url_info[path]) ? $url_info[path] : “/”;
$url_info[query] = ($url_info[query]) ? “?” . $url_info[query] : “”;

// пакуем данные для передачи
// в генерирующий скрипт
// использование serialize очень удобно,
// так как позволяет
// залить в request.php мегабайты данных

$request = serialize($buffer);

// формируем запрос для передачи по сокету

$query = “POST ” . $url_info[path] . ” HTTP/1.1\r\n”;
$query = $query . “Content-Type: text/xml\r\n”;
$query = $query . “Host: ” . $url_info[host] . “\r\n”;
$query = $query . “Content-length: ” . (strlen($request)) . “\r\n\r\n”;
$query = $query . $request;

// создаем сокет, переводим его
// в неблокирующий режим и запускаем
// обработчик запросов

$errno = 0;
$error = “”;

$socket = fsockopen($url_info[host], $url_info[port], $errno, $error, 30);
stream_set_blocking($socket, 0);
stream_set_timeout($socket, 3600);
fputs($socket, $query);

// запоминаем запущенный сокет

$sockets[md5(time())] = $socket;
}
}

// читаем данные из сокета. формально они нам
// не нужны, но это позволяет
// отработать обработчкику запросов

reset($sockets);
while ($socket = current($sockets))
{
if (feof($socket))
{
// убиваем сокет, который отработал

unset($sockets[key($sockets)]);
}
else
{
// читаем данные из сокета

$temp = fgets($socket, 1000);
}

// обрабатываем следующий сокет

next($sockets);
}

// делаем небольщую задержку,
// иначе загруженность сервера
// приближается к 100 процентам

sleep(1);

// если нет активных сокетов, то можно выходить

if (count($sockets) == 0)
$done = true;
}

fclose($keywords);

die;

может кому то пригодится ...

Pochka
30.09.2006, 22:47
На каком – то сайте видел вот такой пример «многопоточности». Тут естественно идёт симуляция, т.к. в php многопоточности нет. Пример никогда не использовал, т.к. так и не встретился с задачей в которой это хоть чем то помогло.




может кому то пригодится ...
=) Это нам только что показывали, здесь "многопоточность" реализована безобразно, но смысл понятен, если сделать тоже самое с функциями socket_ и использованием селеста, то можно сделать замечательно работающие программы с распараллеленной работой с серверами (например для брута, скана и т.д. Так же таким образом делается кроссплатформенные серверы на PHP)

Sw%00p
30.09.2006, 22:49
правильно в пхп нет многопоточности так как пхп это интерпретаторны а не компиляторный язык программинга
в пхп разные части кода одновременно выполнять нльзя и циклы это не многопоточность если тока в одном цикле не указатть к примеру десять коннектов одновременно но всё же не закончив один коннект к другому не перейдёт он он же построчно читает и выполняет
а компиляторные другое дело

KSURi
30.09.2006, 23:03
nerezus, zaco
тем не менее этот пример довольно рапространен.

ZaCo
30.09.2006, 23:19
с таким же успехом можно и system('php '.__file__) мутить) с передачей левого параметра. вообще согласен с Pochka - елси необходимо реализовывать многопоточность для работы с сокетами то лучше просто юзать их в неблокирующем режиме... только вот функции для этого не вкулючены по-умолчанию - используем php_sockets.
2Sw%00p а перл с питоном это бабушкины сказки?) что мешает выполнять многопоточность в скриптовом языке программирования? разве интерпретатор не может этого уследить?

SMiX
30.09.2006, 23:27
Бэмц. Не в состоянии сейчас ситать весь топик, скажу из своего опыта - pcntl - спец. модуль пхп для многопоточности. Чтобы была поддержка, нужно компиллить с опцией --with-pcntl. Также можно делать exec('php thread.php параметры_или_файл_с_сериал айзнутым_массивом_параметр ов &') system('аналогично') и прочее. Для каждого случая нужен свой способ: если вы пишете для себя, можно юзеть pcntl, если какой-нибудь скрипт, предназначенный для массового распространения, лучше юзать системные вызовы, т.к. pcntl установлен далеко не везде, а рут есть не у всех сами понимаете :). Некоторые еще извращаются с ифреймами... Но по мне так если скрипт многопоточный, значит он серьезный, и тут мне больше нравится консольная реализация. Можно лишь написать админку с использованием хтмл, которая, в свою очередь, будет запускать главный скрипт или сразу потоки... ВОт такой вот бред сбодуна получился :)

Sw%00p
01.10.2006, 01:14
с таким же успехом можно и system('php '.__file__) мутить) с передачей левого параметра. вообще согласен с Pochka - елси необходимо реализовывать многопоточность для работы с сокетами то лучше просто юзать их в неблокирующем режиме... только вот функции для этого не вкулючены по-умолчанию - используем php_sockets.
2Sw%00p а перл с питоном это бабушкины сказки?) что мешает выполнять многопоточность в скриптовом языке программирования? разве интерпретатор не может этого уследить?
бля речь шла о пхп а не о перле как ты можешь в скрипте одновременно выполнить две процедуры да ни как интерпретатор читает построчно и выполняет поочереди
а вот например в Делфи можно открыть букет сокетов вот те и многопоточность а в пхп невозможно тока из за того что он интерпретаторный
опять таки цикл это не многопоточность
если так говоришь про многопоточность то напарь
любой скриптик где одновременно 10 коннектов было

ZaCo
01.10.2006, 01:27
>>опять таки цикл это не многопоточность
тогда понятия потока не существует вообще. для создания потока идет "цикл" на низком уровне (иначе-то как?). а окошечки как рисуются в винде? на низком уровне идет один большой цикл. у скриптового языка один большой цикл выполняет интерпретатор. то что в пхп нет такой возможности не говорит о том что в скриптовом языке программирования это не реализуемо.

nerezus
01.10.2006, 08:48
правильно в пхп нет многопоточности так как пхп это интерпретаторны а не компиляторный язык программинга Бред. Учи матчасть. В питоне есть. И даже в перле есть.
А в пхп нету, так как в нем не нужна - он для веб-приложений, а не для всякиъх брутов и т.д.

тем не менее этот пример довольно рапространен. Кто его юзает — ССЗБ.

pcntl - спец. модуль пхп для многопоточности. Это не многопоточность, а системные вызовы никсы. Да и среди них из более-менее пригодных для многопоточности только fork. Но форк и threads(собственно многопоточность) разные вещи. Не путай красное с квадратным.


как ты можешь в скрипте одновременно выполнить две процедуры да ни как Во-первых, срочно читай это: http://www.parabox.ru/files/russian-spelling-punctuation-20050802.chm
Во-вторых, паралельно две процедуры спокойно могут выполняться. Одноядерные процы остались в прошлом.

а вот например в Делфи можно открыть букет сокетов вот те и многопоточность а в пхп невозможно тока из за того что он интерпретаторный Почему нельзя? Слушай, для одной темы ты уже достаточно нагнал, ты случайно не политик?

интерпретатор читает построчно и выполняет поочереди Бред, скрипт на пхп/питоне/перл сначала компилируется в байткод, а потом этот байткод исполняется на вирт. машине.

В заключение: стоит выбирать средства, наиболее подходящие для реализации поставленной цели.
В PHP нету многопоточности.

Pochka
01.10.2006, 13:08
Дискуссия Продвинутых Спецов как всегда свелась к русскому языку. Кто-то под многопоточностью понимает распараллеленность выполнения действий, а кто-то определение из теории многозадачности

St__one
01.10.2006, 13:52
2KSURi: это 1 или 2 линк который я нашёл в Google номральным назвать трудно, но всё равно спасибо!

2nerezus: Разложил всё по полочкам

2All: Спасибо за внимание и вермя

VampiRUS
02.10.2006, 05:55
наконец-то вспомнил как расшифровывается php и пошел учить perl

nerezus
02.10.2006, 10:59
наконец-то вспомнил как расшифровывается php и пошел учить perl PHP расшифровывается так: PHP Hypertext Preprocessor

А вот перл сасает: нет таких областей, где он был бы лучшим.
При этом имеет ряд недостатков: низкая скорость, мало модулей, убогий синтаксис, неактуальность.

[hidden]
02.10.2006, 13:55
Разве? Как я слышал, Perl считается лучшим для разборки текста..
Настораживает растущая популярность ROR (Ruby on Rails) и Python -- его даже Google использует для своего генератора сайтмапов.
Я посмотрел -- что-то сильно незнакомое, абсолютно чужой синтаксис.. А как насчет скорости?

Sw%00p
02.10.2006, 15:29
Бред, скрипт на пхп/питоне/перл сначала компилируется в байткод, а потом этот байткод исполняется на вирт. машине.

ты видать в первом классе информатику не открывал и не знаешь отличия между компилируемыми и интерпретируемымми языками программирования

и опять токи напоминаю речь идёт о пхп
ещё пихните баш сюды поток коннектов или многопоточность это когда одновременно 10 коннектов на один адрес идёт откройте любой брутус и посмотрите таблицу коннектов
10 (к примеру) коннектов открываются и в зависимости от ответов потом закрываются
а в пхп опять таки в цикле (рассматриваем брутфорс какой нить) коннект будет идти поочереди

даже если в одну интерацию цикла пихнуть десять коннектов ну типа (fsockopen) опять таки одновременно все 10 не откроются только после окончания первого будет открываться второй
а это разве многопоточность?
почитайте лучше про букет сокетов

Pochka
02.10.2006, 17:06
даже если в одну интерацию цикла пихнуть десять коннектов ну типа (fsockopen) опять таки одновременно все 10 не откроются только после окончания первого будет открываться второй
а это разве многопоточность?
почитайте лучше про букет сокетов
Если php собран с поддержкой сокетов, то всю кучу сокетов можно коннектить уже в неблокирующем режиме

nerezus
02.10.2006, 17:56
Как я слышал, Perl считается лучшим для разборки текста.. Потом придумали питон...

А как насчет скорости? медленнее перла только Ruby.



а в пхп опять таки в цикле (рассматриваем брутфорс какой нить) коннект будет идти поочереди п*здишь. Ты про неблок. сокеты не слышал?

ты видать в первом классе информатику не открывал и не знаешь отличия между компилируемыми и интерпретируемымми языками программирования У меня сегодня очень плохое настроение. Поэтуму слушать твой бред и оскорбления я не намерен. Короче ты забанен.

nc.STRIEM
04.10.2006, 20:27
2Dr.Check: цикл будте выполняться послелодвательно

2fucker"ok: а 100 проще?
А вот это то что ты написал хош сказать будет не последовательно выполняться?????
ТО что ты написал тож последовательно будет!