Многопоточность в PHP

CEBEP

Новичок
Многопоточность в PHP

Для создания многопоточности, есть функия pcntl_fork(), но я сталкнулся с проблеммой, код который приведен тут http://www.phpclub.net/manrus/f/pcntl-fork.html работает, но вот только если его запустить из консоли из под линукса, а вот если из скрипта запускать, то файл с кодом ругается на (Fatal error: Call to undefined function pcntl_fork() in Z:\home\AlephOneBeta10.4\www\pcntl.php on line 3) - причем пхп собран вместе с pcntl расширением, непонятно как решить данную проблемму, возможно ктолибо сталкивался с таким!?!?!?
 

HraKK

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

Принципиально не буду тут отвечать.
 

Alexandre

PHPПенсионер
:) CEBEP
читай доку по pcntl
а вообще ИМХО : многопоточность в пхп - это миф...
вернее смех :)
 

AmdY

Пью пиво
Команда форума
блин, ну и мануал стал, еле нашёл и то, только потому что раньше читал в chm
здесь проблема не только в денвере и винде, а в ещё может быть и в установке php
http://www.php.net/manual/ru/pcntl.installation.php
 

fixxxer

К.О.
Партнер клуба
интересно, как на венде сделать форк :)

createprocess + longjmp? :D

-~{}~ 23.09.08 13:48:

UPD:
The fork call in Cygwin is particularly interesting because it does not map well on top of the Win32 API. This makes it very difficult to implement correctly. Currently, the Cygwin fork is a non-copy-on-write implementation similar to what was present in early flavors of UNIX.

The first thing that happens when a parent process forks a child process is that the parent initializes a space in the Cygwin process table for the child. It then creates a suspended child process using the Win32 CreateProcess call. Next, the parent process calls setjmp to save its own context and sets a pointer to this in a Cygwin shared memory area (shared among all Cygwin tasks). It then fills in the child's .data and .bss sections by copying from its own address space into the suspended child's address space. After the child's address space is initialized, the child is run while the parent waits on a mutex. The child discovers it has been forked and longjumps using the saved jump buffer. The child then sets the mutex the parent is waiting on and blocks on another mutex. This is the signal for the parent to copy its stack and heap into the child, after which it releases the mutex the child is waiting on and returns from the fork call. Finally, the child wakes from blocking on the last mutex, recreates any memory-mapped areas passed to it via the shared area, and returns from fork itself.
в рот мне ноги!
 

Alexandre

PHPПенсионер
А каким мужским половым fork относится к многопоточности
если под многопоточностью имеется ввиду много тредовость в одном процессе, то это в пхп принципиально не реализуется. Нужно переписывать ядро на уровне языка. Да и смысла нет в данном контексте - многопоточности
 

nerezus

Вселенский отказник
то это в пхп принципиально не реализуется
Ну собственно про это и говорю.

Да и смысла нет в данном контексте - многопоточности
У меня было много задач, где она была нужна. Приходилось юзать питон.
 

Baranov_Dron

Новичок
А чем плохо решение иметь два скрипта, один при помощи сurla запускает несколько экземпляров другого по крону.
А другой скрипт должен не давать открывать открытый поток повторно(допустим вызывается скрипт так script.php?exzemplar=1, script.php?exzemplar=2, script.php?exzemplar=3).
 

nerezus

Вселенский отказник
Baranov_Dron А где там многопоточность?
Ты не знаешь что такое многопоточность. Поэтому идешь учить матчасть: http://ru.wikipedia.org/wiki/Многопоточность

Одно адресное пространство - необходимое условие для нее.
 

Baranov_Dron

Новичок
nerezus дык у меня не мультипоточность, просто вариант решения проблемы когда нужна мультипоточность, например:
1) чек большого количество прокси, соксов
2) грабилка большого количества сайтов
3) демон скрипта фотогаллереи делающий превью, когда их большое количество
etc.
Это всё должно быть организованно при помощи мультипоточности, но и моё решение работает на ура.
 

est-in

Новичок
Baranov_Dron, curl`о - cron`вая "многопоточность" позволяет решить много задач, но какой ценой...

1) Тебе дадут одновременно запустить ровно столько "потоков"/процессов сколько работкиков в пуле у вебсервера. А пользователи пускай лапу сосут...

2) Очень кривая будет реализация. В одном большом цикле будут проверяться флаги всех "потоков"... уж лучше callback

Реализации подобной многозадачности дурно пахнет...

Уж лучше использовать метод в сылке Beavis`а - "Локальный параллелизм PHP"
 

Baranov_Dron

Новичок
Да статья весьма интересна, ознакомлюсь поподробнее на досуге.
1) я скрипты подобного рода запускал на дедиках, и в ресурсах был скован не особо... поэтому не задумывался о производительности.
2) что и где криво?
есть скрипт, который запускает несколько экземпляров другого скрипта по крону, а запускаемый экземпляр сам смотрит запущен ли он уже при помощи fseek и если нет, то запускается...
 

Alexandre

PHPПенсионер
А чем плохо решение иметь два скрипта, один при помощи сurla запускает несколько экземпляров другого по крону.
А другой скрипт должен не давать открывать открытый поток повторно(допустим вызывается скрипт так script.php?exzemplar=1, script.php?exzemplar=2, script.php?exzemplar=3).
слишком много ресурсов,
криво все это
многопоточность нужна там, где есть требования по ресурсам раз и есть многопроцессорность (4 или более процессоров ) - два
эффективна в таких задачах, в которых разные потоки(нити) обращаются к разным по составу ресурсов источникам.
 
Сверху