Non Thread Safe とThread Safe の違いについて書きます。
これはNon Thread Safe とThread Safe の違いって何か?なんですが、
簡単に言うとCPUの中で同時に動いている別々の処理機構であるスレッドが、
1つの動作中のプログラムを効率よく処理しようとしたときに不具合を起こさない様に作られたものを
「Thread Safe」といい、1つのプログラムが同時にCPU内のスレッドを使う事に対応していないのが
「Non Thread Safe」と言う事になる様です。
では厳密にPHP にはその2種類の「Non Thread Safe」と「Thread Safe」が
存在しているのですが、しかし私には、これらの違い指し示す所が厳密にどうなのか、
私には見当が付きませんでした。
なのでファイルを比較したところ、見当が付きました。
------------------------------------------------------------------
[1] : php-5.3.2-nts-Win32-VC6-x86|| [2] : php-5.3.2-Win32-VC6-x86
------------------------------------------------------------------
|.. ---| |.. ---
L|dev ---|R|dev ---
L|ext ---|R|ext ---
|extras ---| |extras ---
|PEAR ---| |PEAR ---
|go-pear.bat 90| |go-pear.bat 90
|icudt36.dll 10,166,272| |icudt36.dll 10,166,272
|icuin36.dll 954,368| |icuin36.dll 954,368
|icuio36.dll 53,248| |icuio36.dll 53,248
|icule36.dll 192,512| |icule36.dll 192,512
|iculx36.dll 45,056| |iculx36.dll 45,056
|icutu36.dll 106,496| |icutu36.dll 106,496
|icuuc36.dll 1,064,960| |icuuc36.dll 1,064,960
|install.txt 86,472| |install.txt 86,472
|libeay32.dll 1,069,056| |libeay32.dll 1,069,056
|libpq.dll 464,172| |libpq.dll 464,172
|license.txt 3,286| |license.txt 3,286
|news.txt 279,571| |news.txt 279,571
|phar.phar.bat 39| |phar.phar.bat 39
L|pharcommand.phar 53,212|R|pharcommand.phar 53,212
L|php-cgi.exe 45,124|R|php-cgi.exe 49,223
L|php-win.exe 28,740|R|php-win.exe 28,743
L|php.exe 28,736|R|php.exe 28,739
|php.gif 2,523| |php.gif 2,523
|php.ini-development 70,515| |php.ini-development 70,515
|php.ini-production 70,800| |php.ini-production 70,800
L|php5.dll 5,476,417| |
L|php5apache.dll 32,839|R|php5apache.dll 36,938
| |R|php5apache2.dll 36,939
| |R|php5apache2_2.dll 36,941
| |R|php5apache2_2_filter.dll 36,948
| |R|php5apache2_filter.dll 36,946
L|php5apache_hooks.dll 49,229|R|php5apache_hooks.dll 53,328
L|php5embed.lib 785,796|R|php5embed.lib 796,892
| |R|php5nsapi.dll 32,841
| |R|php5ts.dll 5,648,454
|pws-php5cgi.reg 135| |pws-php5cgi.reg 135
|pws-php5isapi.reg 139| |pws-php5isapi.reg 139
|readme-redist-bins.txt 20,693| |readme-redist-bins.txt 20,693
L|snapshot.txt 952|R|snapshot.txt 955
|ssleay32.dll 212,992| |ssleay32.dll 212,992
------------------------------------------------------------------
[1] : php-5.3.2-nts-Win32-VC6-x86 の方が、「Non Thread Safe」であり、
[2] : php-5.3.2-Win32-VC6-x86 の方が、「Thread Safe」です。
このファイル比較を見てわかったことは、Apache2系のdll が「Non Thread Safe」の方には
有りません。
当たり前といえば当たり前なのかもしれませんが、Apache2系がマルチスレッドでの動作に
対応したApache だったはずなので、マルチスレッド対応=「Thread Safe」であり、
もっと言い換えるなら、「Thread Safe」=マルチスレッド対応=Apache2も対応 と言う意味で
とらえて、もっと名前の意味だけで種類を考えるのならば、PHP のバージョンの話ではあるが、
Non Thread Safe とThread Safe の違いは、Apache のバージョンの違いであることと
思っておけば良いと思う。
○「Thread Safe」=マルチスレッド対応=Apache2系も対応
○「Non Thread Safe」=マルチスレッド非対応=Apache1系のみ
また前回ブログにも載せた
○IIS を使うならVC9 でコンパイルされたパッケージ
○Apache (2.2迄)を使うならVC6 でコンパイルされたパッケージ
を使う様にPHP のパッケージは構成されている。
(VCコンパイラのバージョンによってApache かIIS のどちらに使うかの
推奨?推薦?バージョンが決まっているっていた時代の話です。
今はもっとVC11 などもありますし、この記事を修正している今のPHPの最新バージョンは
7.2.2などがありますので、斜線をあえて引いておきました。)
ちょこっとリンク:
スレッドセーフの説明 1、2、3
追伸:
上記の記事は古くなった!!!
追記の内容は
Apache とPHP のバージョンについて(2014年3月31日)
に書きました。