Re: PHP Multi-threading

Re: PHP Multi-threading

am 01.04.2008 00:20:32 von Jerry Stuckle

George Maicovschi wrote:
> On Mar 31, 8:20 pm, Jerry Stuckle wrote:
>> George Maicovschi wrote:
>>> On Mar 31, 5:45 pm, Jerry Stuckle wrote:
>>>> George Maicovschi wrote:
>>>>> Hey Erwin,
>>>>> It's just an experiment of mine, nothing production-related... YET :-)
>>>>> The thing goes like this. I have a script that's supposed to do an
>>>>> action on lets say 100 different hosts in the same time. So I need
>>>>> multi-threading ar a way to emulate it. My approach was this:
>>>>> $threads=array();
>>>>> $responses=array();
>>>>> foreach ($hosts as $host)
>>>>> $threads=fopen('http://domain.with.the.script/path/to/script /
>>>>> script.php?op=action&host={$host}','r');
>>>>> foreach ($threads as $thread_id=>$thread)
>>>>> if ($thread)
>>>>> {
>>>>> $responses[$thread_id]=''
>>>>> while (!feof($thread))
>>>>> $response[$thread_id].=fgets($thread);
>>>>> fclose($thread);
>>>>> }
>>>>> So now the threading part is emulated through Apache, making
>>>>> concurrent requests to the script.php that contains the actions to be
>>>>> undertaken and specifying the host that I want to be the target of the
>>>>> actions.
>>>>> Basically that's my approach to multi-threading emulation in PHP.
>>>>> So...any suggestions/ideas/anything? :-)
>>>>> I am really curious about other approaches because this multi-
>>>>> threading thing in PHP seems rather disturbing because of it's
>>>>> absence. :-)
>>>>> Cheers,
>>>>> George Maicovschi.
>>>> Where are you creating new threads?
>>>> I agree with Erwin - if you need to use threads, PHP isn't a good way to
>>>> go. If you really need this and it's has to be in PHP, I'd look at
>>>> spawning multiple processes off and do the work in batch mode, perhaps
>>>> saving the results in a database.
>>>> But personally I'd be looking at another language such as Java or C/C++
>>>> which has good thread support.
>>>> --
>>>> ==================
>>>> Remove the "x" from my email address
>>>> Jerry Stuckle
>>>> JDS Computer Training Corp.
>>>> jstuck...@attglobal.net
>>>> ==================
>>> Yeah, I would go the C way myself, but it has to be PHP...
>> That's a shame because you're trying to use a hammer when you need a
>> screwdriver.
>>
>> There really is no *good* way to do it in PHP. About the only way
>> you're going to be able to do it is like I suggested above - spawn off
>> multiple processes to do the work and collect the results in a database
>> or similar.
>>
>> --
>> ==================
>> Remove the "x" from my email address
>> Jerry Stuckle
>> JDS Computer Training Corp.
>> jstuck...@attglobal.net
>> ==================
>
> Well it seems I might be getting some results using fsockopen() on the
> host the script is hosted for each 'thread', so I might be able to
> achieve a pseudo-multithreading...
>
> I'll post my findings here.
>

Yea, but the problem is fsockopen() is synchronous and PHP won't return
until the script is completed. So you're not actually multithreading -
just creating a lot of overhead with multiple requests to the same script.

--
==================
Remove the "x" from my email address
Jerry Stuckle
JDS Computer Training Corp.
jstucklex@attglobal.net
==================