On Dec 16, 2010, at 12:28 AM, jvlad wrote:

>>> No. Php if we talk about php with all its extensions is not threadsafe
>>> at
>>> all. Many of the extensions allocate static data and inherently
>>> non-thread-safe.
>> 
>> PHP is, if compiled with ZTS/TSRM, thread-safe. Some libraries used by
>> some extensions might not be thread safe, but basically all "usually"
>> used ones are thread-safe. While it is a bit complicated as some
>> libraries could either be compiled thread-safe or not or some might be
>> not thread-safe on specific systems ... but that's not PHP itself ;-)
>> 
>> johannes
>> 
> 
> Dear Johannes,
> 
> I'm not sure why you repeated what I stated in my post. So I'm repeating it 
> after you too :)
> Yes, php core is developed with threadsafe techniques in mind, some 
> extensions are safe too, and some extensions which are using 3rd party 
> libraries are definitely not safe.
> 
> The only thing I'd kindly ask you to pay more attention to is using 
> "usually" word together with "safe" in one sentence. In my opinion they 
> should never be used both if we talk about production servers, or at least 
> servers where crashes are not welcome.
> 
> Just to illustrate the issue with "usually", do you consider openssl, a 
> widely used php extension, as a "usually threadsafe" extension?
> If you do, please take a look at this page 
> http://www.openssl.org/docs/crypto/threads.html and these words in 
> particular:
> 
> OpenSSL can safely be used in multi-threaded applications provided that at 
> least two callback functions are set, locking_function and threadid_func. 
> locking_function(int mode, int n, const char *file, int line) is needed to 
> perform locking on shared data structures. (Note that OpenSSL uses a number 
> of global data structures that will be implicitly shared whenever multiple 
> threads use OpenSSL.) Multi-threaded applications will crash at random if it 
> is not set
> 
> 
> Do you think any locking function is implemented in openssl php extension?
> 

In PHP a SSL_CTX is per thread and is not shared across other threads so it 
isn't an issue. We don't need to implement any openssl locking functions.

An example of non-thread safe is gettext it relies on the locale which is per 
process and not per-thread.

PHP itself at the core is thread safe. As Johannes said most common modules are 
too.

- Scott



--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to