Какой механизм многопоточности (пусть эмуляции) юзать в скриптах на PHP? - Форум успешных вебмастеров - GoFuckBiz.com
 
 
Форум успешных вебмастеров - GoFuckBiz.com

  Форум успешных вебмастеров - GoFuckBiz.com > Бизнес-решения > Скрипты, программы и технические решения
Дата
USD/RUB93.4409
BTC/USD64738.8598
Скрипты, программы и технические решения Обсуждаем скрипты, программы и новые технологии.

Результаты опроса: Что юзаем?
мультикурл 13 56.52%
асинхронные сокеты 7 30.43%
pcntl_fork 5 21.74%
stream функции 0 0%
другое? 3 13.04%
Опрос с выбором нескольких вариантов ответа. Голосовавшие: 23. Вы ещё не голосовали в этом опросе

Закрытая тема
Опции темы Опции просмотра
Старый 11.04.2010, 18:13   #1
ne0zx
Senior Member
 
Аватар для ne0zx
 
Регистрация: 05.08.2009
Сообщений: 423
Бабло: $94751
По умолчанию Какой механизм многопоточности (пусть эмуляции) юзать в скриптах на PHP?

что оптимальное из скорости\загрузки машины?
ne0zx вне форума  
Старый 11.04.2010, 19:45   #2
oso
кодер
 
Аватар для oso
 
Регистрация: 21.01.2008
Сообщений: 315
Бабло: $69585
По умолчанию

я за pcntl, если его нет, то запускаю мультикурлом потоки..
__________________
php скрипты от $25 Отзывы: 2013-2011, 2010, 2009. acя: 384 846 ноль два шесть
oso вне форума  
Старый 11.04.2010, 20:08   #3
imgreen
Senior Member
 
Аватар для imgreen
 
Регистрация: 15.11.2008
Сообщений: 13,230
Бабло: $247845891
По умолчанию

дайте пример реализации на pcntl_fork
никогда не пробовал многопоточность)
imgreen вне форума  
Старый 11.04.2010, 20:31   #4
medar
кодер-энтузиаст
 
Аватар для medar
 
Регистрация: 04.04.2007
Адрес: Джамайка
Сообщений: 3,381
Бабло: $447150
По умолчанию

Наткнулся на Хабре - многопоточность на базе функций proc_*() : http://habrahabr.ru/blogs/php/90487/
medar вне форума  
Старый 11.04.2010, 20:50   #5
chesser
автоматизирую интернеты
 
Аватар для chesser
 
Регистрация: 05.07.2009
Адрес: chesser.ru
Сообщений: 3,362
Бабло: $470735
По умолчанию

а про какую многопоточность идет речь?
имеется ввиду распараллеливание процессов, но что за процессы?
Если надо осуществлять коннекты к внешним ресурсам, то я бы мультикурл использовал. А если абстрактное распараллеливание - то хз, есть разные псевдо решения.

Тут немного есть про многопоточность php и curl
__________________
USA и NL серверы и VPS | wiki | блог | Drupal | NginxТДС
Ave, Google, morituri te salutant! © chesser
chesser вне форума  
Старый 11.04.2010, 20:54   #6
ne0zx
Senior Member
 
Аватар для ne0zx
 
Регистрация: 05.08.2009
Сообщений: 423
Бабло: $94751
ТС -->
автор темы ТС По умолчанию

Цитата:
Сообщение от chesser Посмотреть сообщение
а про какую многопоточность идет речь?
имеется ввиду распараллеливание процессов, но что за процессы?
Если надо осуществлять коннекты к внешним ресурсам, то я бы мультикурл использовал. А если абстрактное распараллеливание - то хз, есть разные псевдо решения.

Тут немного есть про многопоточность php и curl
простые спамилки.
1 процесс - зайти туда-то, заполнить профиль и\или запостить пост в блог. проверить на success.
ne0zx вне форума  
Старый 11.04.2010, 21:06   #7
chesser
автоматизирую интернеты
 
Аватар для chesser
 
Регистрация: 05.07.2009
Адрес: chesser.ru
Сообщений: 3,362
Бабло: $470735
По умолчанию

Цитата:
Сообщение от ne0zx Посмотреть сообщение
простые спамилки.
1 процесс - зайти туда-то, заполнить профиль и\или запостить пост в блог. проверить на success.
с мультикурлом не очень удобно управлять сценариями хождения по сайтам.
допустим, для регистрации надо сделать 5 шагов, это значит 5 последовательных коннектов. Распараллелить тут можно только сами регистрации, чтобы регалось сразу много акков.

С другой стороны, можно чтобы все эти потоки конкурировали между собой, для этого можно пускать все потоки с callback функциями, которые будут рекурсивно запускать еще потоки, следую сценарию.... ну как-то так
можно сделать отдельный менеджер процессов на базе mysql или фс, который будет следить и запускать процессы,
можно fork - но оно памяти будет жрать.

к примеру, у меня прокси-чекер чекает прокси около 1000 в минуту на vds 256м ram - это используя мультикурл, но сначало пользовал типа форк - разница в десятки раз, или в сотни, не помню точно. Чтобы достичь такой скорости, потребовалось бы много памяти, так что подумайте о ней
__________________
USA и NL серверы и VPS | wiki | блог | Drupal | NginxТДС
Ave, Google, morituri te salutant! © chesser
chesser вне форума  
Старый 11.04.2010, 23:37   #8
imgreen
Senior Member
 
Аватар для imgreen
 
Регистрация: 15.11.2008
Сообщений: 13,230
Бабло: $247845891
По умолчанию

в сотню раз меньше мне кажется однопоточный чекер чекнет.
imgreen вне форума  
Старый 12.04.2010, 00:36   #9
qazxcvbnm
Ниибаца крутой програмер
 
Аватар для qazxcvbnm
 
Регистрация: 04.08.2009
Сообщений: 904
Бабло: $177555
По умолчанию

а приведите плз пример какого нибудь скрипта с strem функциями
qazxcvbnm вне форума  
Старый 12.04.2010, 00:45   #10
dveredel
Читатель
 
Аватар для dveredel
 
Регистрация: 23.11.2007
Сообщений: 420
Бабло: $48745
По умолчанию

У мультикурла, также как и у стримов, есть один существенный минус - блокируемый коннект. Т.е. первоначальный коннект к сокету блокирует весь пул на время коннекта, и остальные потоки простаивают. А если прокси юзать, то вобще глюки случаются очень странные, в том числе с неконтролируемым таймаутом секунд на 60...

Если же на чистых сокетах (никаких fsockopen) писать то можно и коннект сделать неблокируемым, и с грамотно написаной либой достичь нереальных скоростей. Правда с соксами возникают большие проблемы, ибо все ручками надо, и тут уже проще забить на коннект и делать через стримы или мультикурл, где поддержка соксов уже встроена.
dveredel вне форума