Как реализовать многопоточность в PHP через fork?

Статус
В этой теме нельзя размещать новые ответы.

nick1m

Постоялец
Регистрация
20 Фев 2008
Сообщения
119
Реакции
8
Как реализовать многопоточность в PHP через fork?
Что бы был обработчик и индикатор процессов. Если можно, с примером.
 
А в пхп нет форка.

И пхп может работаь в двух режимах. Thread Safe и обычном

Обычных это значит один процес - один пхп поток.
В таком режиме в принцепе можно сделать форк.

Но в апач 2 появилась подержка потоков.
например в режине worker=mpm в апаче есть неслькомо процесов ив каждом процесе несколько потоков (трид).

Если сделать форк в таком процесе то остальный потоки будут тоже скопированы. Это абсолютно не то что ты хочешь. в тех потоках могут испольнять чужие скрипты которые не ожидают что они будут распаралелины.

Поэтому в пхп нет форк.

Если тебе нужен форк юзай перл.
 
когда то я тоже задавался вопросом как сделать многопоточность в пхп (все решения довольно кривые). Я в то время ничего не знал о не_блокирующих сокетах, а в конечном итоге именно они позволили ускорить мою утилиту в надцать раз.
Конечно это не ответ на твой вопрос но вдург натолкнёт тебя на мысль :)
 
А в пхп нет форка.
Если тебе нужен форк юзай перл.

Мне нужен не форк, а многопоточность, с перлом вообще не знаком и желания нет по индивидуальным причинам. Просто где-то читал, что в пхп тоже так делают. А вот отрывок из Википедии:

[qute]В Unix-системах, fork() — системный вызов, создающий новый (дочерний) процесс, идентичный выполняющему этот вызов. После вызова fork() алгоритм обычно разветвляется (родительский процесс получает от fork() PID дочернего, а дочерний получает нуль).[/quote]

Поэтому я и подумал, что для пхп это тоже вполне реализуемо.

Добавлено через 2 минуты
Конечно это не ответ на твой вопрос но вдург натолкнёт тебя на мысль :)

Пасиб, будем капать, кстати, а ты форк не пробовал задействовать? Просто ты сказал, что много вариантов пробовал, но про форк ничего.
 
В php есть pcntl_* функции, в том числе и pcntl_fork()
(только *nix).
 
В php есть pcntl_* функции, в том числе и pcntl_fork()
(только *nix).

мысля хорошая, но есть одно но:
Process Control support in PHP is not enabled by default. You have to compile the CGI or CLI version of PHP with --enable-pcntl configuration option when compiling PHP to enable Process Control support.
т.е. нужно плясать с бубном чтобы оно заработало... ну не плясать конечно но далеко не всегда есть возможность чтото перекомпилировать и перенастраивать.
да и на самом деле довольно щекотливый вопрос эти дочерние процессы.... особенно в плане стабильности и целостности... начинающий програмист может натворить много чудес.

вообще ТС, укажите для чего именно оно вам надо?
во многих задачах можно обойтись без реальной многопоточности без потерь производительности. Просто схем много, все так сразу и не озвучишь, может ваша задача уже решена без многопоточности :)
 
вообще ТС, укажите для чего именно оно вам надо?
во многих задачах можно обойтись без реальной многопоточности без потерь производительности. Просто схем много, все так сразу и не озвучишь, может ваша задача уже решена без многопоточности :)

Любая задача, где требуется многопоточность, парсрес SE, спамилка
 
Любая задача, где требуется многопоточность, парсрес SE, спамилка

в том то все и дело что не любая...
у многих парсеров есть довольно большой промежуток между запросом от нового ip.... если капать в сторону
PHP:
curl_setopt($ch, CURLOPT_INTERFACE, $ip);
то часто можно обойтись одним потоком там где некоторые умники поднимали 20....
дальше, есть такой хитрый ход - открывать удаленные файлы, пачкой, а только потом уже в цикле их скачивать - это позволяет не ждать пока выполнится скрипт на удаленной стороне, а в это время открывать следующие.. иногда такой метод экономит до 90% времени работы парсера... чего бывает достаточно. всетаки канал то не бесконечный, и до бесконечности многопоточностью ты скорость не нарастишь...
Просто я отношу многопоточность к тем средствам которых по возможности надо избегать... не отказываться от них конечно, но если есть простое решение которое дает такой же результат без многопоточности, то IMHO лучше выбрать его.
 
Ок, такой пример, у тебя есть 500 кил урлов, которые нужно проверить на 200-ю, вообщем нужны одни заголовки
второй пример - ту же базу нужно проверить на количество страниц в индексе

Нужна ли здесь многопоточность? мне кажется да, возможно я и не прав.

Как бы ты поступил в таких задачах?
 
Process Control support in PHP is not enabled by default. You have to compile the CGI or CLI version of PHP with --enable-pcntl configuration option when compiling HP to enable Process Control support.

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

Зачем такое писать вообще на ПХП?

Сейчас можно писать на чём, то удобном и запускать на домашнем компе. Или если нет дешевого домашнего инета то на ВПС.

Я бы парсер писал бы на джава. Там есть тридс и супер штука для скачивания.
Для просмотра ссылки Войди или Зарегистрируйся

И такая прога будет работать везде.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху