Re: Apologies for the last e-mail concerning (Re: [PHP] migrating to PHP 5 + Apache 2 from PHP 4.3.8 + Apache 1.3.33)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Plan on doing a LOT of testing -- My guesses on the probability of
thread-safety were just that:  GUESSES

Thread-safe bugs are the kind of thing that can remain hidden for *YEARS*
or even *DECADES* and not get triggered but once in a million executions
of your scripts.

By definition, they rely on *TWO* copies of your script running in
"parallel" and timing is everything.

For example, suppose your script is like this:

<?php
/* LOTS OF CODE */
thread_bug_function();
/* LOTS OF CODE */
?>

You can run that script a million times, and nothing will go wrong.

You can even run your web-server with multiple copies of your PHP script
running a million times and nothing will go wrong.

Let's examine the case of just *TWO* Apache children processes, running
your script in parallel.

Depending on when one script starts, when it gets interrupted by the OS so
other processes can run, and when it re-starts, you have *THREE* possible
cases:

(where the "time" at which something is run is indicated in a vertical
manner.

CASE #1:
APACHE CHILD ONE                APACHE CHILD TWO
<?php                           <?php
/* LOTS OF CODE */              /* LOTS OF CODE */ thread_bug_function();
thread_bug_function();          /* LOTS OF CODE */
/* LOTS OF CODE */             ?>
?>

CASE #2:
APACHE CHILD ONE                APACHE CHILD TWO
<?php                           <?php
/* LOTS OF CODE */              /* LOTS OF CODE */
thread_bug_function();
/* LOTS OF CODE */             thread_bug_function(); /* LOTS OF CODE */
?>                             ?>

CASE #3:
APACHE CHILD ONE                APACHE CHILD TWO
<?php                           <?php
/* LOTS OF CODE */              /* LOTS OF CODE */
thread_bug_function();          thread_bug_function();
/* LOTS OF CODE */              /* LOTS OF CODE */
?>                              ?>


CASE #1 and CASE #2 cause no problem at all -- The 'thread_bug_function'
doesn't run at the same time in one child as the other child, because of
the timing -- it runs BEFORE or AFTER the same function in the other
child.

CASE #3 will crash big-time, because the thread-bug got executed at the
SAME TIME in BOTH children.

But here's the thing:  The *larger* your code base, the better the odds
are that CASE #1 and CASE #2 will happen, because there is so much going
on in the /* LOTS OF CODE */ sections.

The ONLY time the bug is triggered is when the two scripts happen to try
to execute the buggy line AT THE SAME TIME.

So CASE #3 is super super super rare.  And it gets more and more rare as
you add more and more code (yours or the PHP Modules you are asking about)
to your project.

The more you think about this, the more you'll realize just how impossible
a question you are posing, and just how complicated you are making your
server by using threads.

There is NO PRACTICAL WAY to systematically test for a thread bug.

Only disciplined coding by experienced software developers will avoid
thread bugs -- and even that is hardly a "given"

So you're really really really going out on a limb to use the threads.

If you *NEED* the threads, you are going to have to pay a heavy heavy
heavy price in doing a *TON* of testing under heavy load servers, with as
much variance in timing of script start/end as you can introduce.

Every line of code you add, and every Module you load in to add
functionality/features will GEOMETRICALLY INCREASE your risk and the need
for testing.

The reason you kept getting "bad" answers, or answer at all, is you kept
asking a "bad" question :-)

Things to consider:
#1. Do you really *NEED* threads?
#2. If you *DO* need them, can you segment your application and modularize
and isolate the thread usage to a single server, or a single body of code,
or an isolated case that will be called rarely or ???
#3. Do you have the resources to run a billion tests?

If you need threads, and you can't isolate them to a sandbox, and you
don't have the resources for a billion tests, QUIT NOW.

You will save yourself a ton of money and frustration by not tackling an
insurmountable project that will ruin you.

"A man's got to know his limitations"
                       -- Dirty Harry

symbulos partners wrote:
> I apologise for the last e-mail concerning this subject, but I had not
> received your e-mail back.
>
> Thanks for the explanations, they will be very useful.
> --
> symbulos partners
> -.-
> symbulos - ethical services for your organisation
> http://www.symbulos.com
>


-- 
Like Music?
http://l-i-e.com/artists.htm

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux