diff --git a/reference/pthreads/book.xml b/reference/pthreads/book.xml index 12ba95255..7a3aa97ec 100644 --- a/reference/pthreads/book.xml +++ b/reference/pthreads/book.xml @@ -1,19 +1,18 @@ - + - - + pthreads pthreads &reftitle.intro; - + pthreads はオブジェクト指向の API で、PHP でマルチスレッド処理を行うのに必要なすべてのツールを提供します。 PHP アプリケーションで、Thread や Worker そして Threaded を作ったり読み書きしたり実行したりできるようになります。 - + この拡張モジュールはメンテナンスされておらず、終了していると考えられます。 @@ -25,22 +24,22 @@ - + pthreads 拡張モジュールは、Webサーバー環境では使えません。 よって、PHP でのスレッド処理は CLIベースのアプリケーションに限られています。 - + - + ptheads (v3) は PHP 7.2+ で使えます。 これは ZTS モードが 7.0 と 7.1 では安全でないためです。 - + - + Threaded クラスが、pthreads が実行できる機能のもとになります。 このクラスは同期のメソッドとプログラマにとって便利なインタフェイスをいくつか公開しています。 - - + + Thread クラスと使うと、 それを継承し、run メソッドを実装するだけでスレッドを作れます。 あらゆるメンバにスレッドの参照を使ってあらゆるコンテキストで読み書きができます。 @@ -48,8 +47,8 @@ run メソッドは、この実装オブジェクトが作られたスレッドとは別の、 Thread::start が呼ばれたスレッドで実行されます。 スレッドを作ったコンテキストだけが、スレッドの start や join を行えます。 - - + + Worker クラスは永続的な状態を保持し、 Thread::start (またはそれを継承したメソッド) を呼んだ時点から オブジェクトがスコープ外に消えるまで、 @@ -59,42 +58,42 @@ これを、Worker が別スレッドで実行します。 Worker の run メソッドは、あらゆるオブジェクトがスタックに積まれる前に実行されます。 そのため、オブジェクトで必要となるリソースの初期化に使えます。 - - + + Pool クラスを使って、 Threaded オブジェクトを分散させるワーカークラスのグループを作ることができます。 複数スレッドを扱う際に最も簡単かつ効率的な方法です。 - + - + Pool クラスは Threaded クラスを継承していません。 そして、Pool ベースのオブジェクトは通常の PHP オブジェクトです。 よって、そのインスタンスをコンテキスト間で共有してはいけません。 - + - + Volatile は pthreads v3 で登場した新しいクラスです。 これは Threaded クラスのプロパティを変更可能にするために使います (なぜなら、これらはデフォルトでは変更できないからです) PHP の配列を Threaded コンテキストに保存する目的でも使えます。 - - + + 同期はスレッドを扱う際に重要な機能です。 pthreads が作る全てのオブジェクトには (Java プログラマーならおなじみの) Threaded::waitThreaded::notify による同期処理が組み込まれています。 あるオブジェクトの Threaded::wait を呼ぶと、 - 別のコンテキストから同じオブジェクトの Threaded::notify + 別のコンテキストから同じオブジェクトの Threaded::notify が呼ばれるのを待つようになります。 これを使えば、PHP 内のスレッド化されたオブジェクト (Threaded Object) どうしで強力な同期処理ができるようになります。 - + - + マルチスレッドで実行されるあらゆるオブジェクトは Threaded を継承すべきです。 - + - + データストレージ: 目安として、シリアライズ可能なデータ型なら何でも、スレッド化されたオブジェクトのメンバーとして使えます。 そのオブジェクトへの参照を持つあらゆるコンテキストから、メンバーの読み書きができます。 @@ -106,8 +105,8 @@ そのスレッド化されたオブジェクト内の参照とは区別されます。 同じデータを、いつでもどのコンテキストからでも、 スレッド化されたオブジェクトから直接読み込めます。 - - + + static メンバー: 新しいコンテキスト (Thread あるいは Worker) を作るときには、一般的にそれらはコピーされます。 しかし、リソースおよび内部状態を持つオブジェクトは、安全性を考慮して null 化されます。 @@ -116,29 +115,29 @@ コンテキストを開始するときには接続情報だけがコピーされ、接続自体はコピーされません。 新しいコンテキスト上ではそのコンテキストを作ったオブジェクトと同じ方法で接続を立ち上げることができ、 その接続を同じ場所に格納しても元のコンテキストには何も影響を及ぼしません。 - + - + print_r や var_dump などのオブジェクトのデバッグ用関数を実行するきには、 再帰の制限が含まれません。 - + - + リソース: PHP のリソースを定義している拡張モジュールは、この手の環境で扱うには不十分です。 pthreads はリソースをコンテキスト間で共有するための対策を用意していますが、 大半のリソース型は安全には扱えません。 コンテキスト間でリソースを共有するときには、いくら注意してもしすぎることはありません。 - + - + pthreads を実行する環境下では、安定した環境を提供するためにいくつかの制約と限界があります。 - + - + &reference.pthreads.setup; &reference.pthreads.constants; &reference.pthreads.threaded; @@ -149,7 +148,6 @@ &reference.pthreads.volatile; - - - -
+ +
&reftitle.install; - + PHP のコンパイル時に を指定します。 - + - + Windows ユーザーは、&php.ini; で php_pthreads.dll を指定しなければいけません。 - + - + また、Windows ユーザーは pthreadVC2.dll にパスを通しておく必要があります。このファイルは、配布物に含まれています。 - +
- - - - + + &reftitle.setup;
&reftitle.required; - + pthreads を使うには、ビルド時に ZTS (Zend Thread Safety) を有効 ( を指定。 PHP 8.0.0 より前のバージョン、かつ Windows 以外のバージョンの場合は、 を指定) にする必要があります。 - + - + ZTS はビルド時の設定オプションです。ビルドした後で変更することはできません。 - + - + pthreads は、Posix スレッドのヘッダファイル (pthread.h) と ZTS 版の PHP があればどこでもビルドできます。 Windows でもビルド可能で、その際には redhat の pthread-w32 プロジェクトを利用します。 - +
&reftitle.install; - + pthreads のリリースは PECL でホストされており、ソースコードは github にあります。 最も簡単なインストール方法は、PECL の &url.pecl.package;pthreads からのインストールです。 - - + + Windows ユーザー用のビルド済みバイナリは、PECL のウェブサイトからダウンロードできます。 - + - + Windows ユーザーはさらに、pthreadVC2.dll (Windows 版のリリースに含まれています) をパスの通った場所に置くという作業も必要です。 - +
- - - - + + Thread クラス Thread @@ -12,17 +11,17 @@
&reftitle.intro; - + このオブジェクトの start メソッドが呼ばれると、run メソッドのコードが個別のスレッドで並列処理されます。 - - + + run メソッドの実行後は Thread はすぐに終了し、作成元のスレッドに適切な時期に join します。 - + - + Thread をいつ join させるのかをエンジンに決めさせていると、予期せぬ振る舞いを引き起こすことがあります。 可能な限り、プログラマーが明示的に指定するようにしましょう。 - +
@@ -39,12 +38,12 @@ Thread - + extends Threaded - + Countable @@ -52,18 +51,18 @@ Traversable - + ArrayAccess - + &Methods; - - + + &InheritedMethods; - + @@ -75,7 +74,6 @@ &reference.pthreads.entities.thread;
- - + @@ -14,9 +14,9 @@ public intThread::getCreatorId - + このスレッドを作ったスレッドの ID を返します。 - + @@ -26,9 +26,9 @@ &reftitle.returnvalues; - + 数値の ID を返します。 - + diff --git a/reference/pthreads/thread/getthreadid.xml b/reference/pthreads/thread/getthreadid.xml index fab0cdc3b..de80604b6 100644 --- a/reference/pthreads/thread/getthreadid.xml +++ b/reference/pthreads/thread/getthreadid.xml @@ -1,6 +1,6 @@ - + @@ -14,9 +14,9 @@ public intThread::getThreadId - + このスレッドの ID を返します。 - + @@ -26,9 +26,9 @@ &reftitle.returnvalues; - + 数値の ID を返します。 - + diff --git a/reference/pthreads/thread/isjoined.xml b/reference/pthreads/thread/isjoined.xml index e8959e271..a932e8826 100644 --- a/reference/pthreads/thread/isjoined.xml +++ b/reference/pthreads/thread/isjoined.xml @@ -1,6 +1,6 @@ - + @@ -14,9 +14,9 @@ public boolThread::isJoined - + このスレッドが同期されているかどうかを調べます。 - + @@ -26,9 +26,9 @@ &reftitle.returnvalues; - + &return.success; - + diff --git a/reference/pthreads/thread/isstarted.xml b/reference/pthreads/thread/isstarted.xml index 7392859eb..184e45f2a 100644 --- a/reference/pthreads/thread/isstarted.xml +++ b/reference/pthreads/thread/isstarted.xml @@ -1,6 +1,6 @@ - + @@ -14,9 +14,9 @@ public boolThread::isStarted - + このスレッドが開始したかどうかを調べます。 - + @@ -27,9 +27,9 @@ &reftitle.returnvalues; - + &return.success; - + diff --git a/reference/pthreads/thread/join.xml b/reference/pthreads/thread/join.xml index 0f6b8a790..0147d470f 100644 --- a/reference/pthreads/thread/join.xml +++ b/reference/pthreads/thread/join.xml @@ -1,6 +1,6 @@ - + @@ -14,9 +14,9 @@ public boolThread::join - + 呼び出し元のコンテキストが、このスレッドの実行終了を待つようにします。 - + @@ -26,9 +26,9 @@ &reftitle.returnvalues; - + &return.success; - + diff --git a/reference/pthreads/thread/start.xml b/reference/pthreads/thread/start.xml index ffa499bef..7221acd60 100644 --- a/reference/pthreads/thread/start.xml +++ b/reference/pthreads/thread/start.xml @@ -1,6 +1,6 @@ - + @@ -14,9 +14,9 @@ public boolThread::start intoptions - + 新しいスレッドを開始し、実装されている run メソッドを実行します。 - + @@ -25,9 +25,9 @@ options - + オプションのマスク。継承に関する定数で、デフォルトは PTHREADS_INHERIT_ALL。 - + @@ -35,9 +35,9 @@ &reftitle.returnvalues; - + &return.success; - + diff --git a/reference/pthreads/worker.xml b/reference/pthreads/worker.xml index 922f78079..5ffe36428 100644 --- a/reference/pthreads/worker.xml +++ b/reference/pthreads/worker.xml @@ -1,8 +1,7 @@ - - - + + Worker クラス Worker @@ -12,27 +11,27 @@
&reftitle.intro; - + ワーカースレッドには永続コンテキストがあり、たいていの場合はスレッドに対して使えます。 - - + + ワーカーを開始させると run メソッドを実行しますが、以下のいずれかの条件を満たすまでスレッドは終了しません。 - + - Worker がスコープから外れる (どこからも参照されなくなる) + Worker がスコープから外れる (どこからも参照されなくなる) - プログラマーが shutdown を呼ぶ + プログラマーが shutdown を呼ぶ - スクリプトが終了する + スクリプトが終了する - + つまり、プログラマーは実行中のコンテキストを再利用できるということです。 オブジェクトを Worker のスタックに置くと、そのオブジェクトの run メソッドを Worker が実行します。 - +
@@ -48,12 +47,12 @@ Worker - + extends Thread - + Traversable @@ -61,18 +60,18 @@ Countable - + ArrayAccess - + &Methods; - - + + &InheritedMethods; - + @@ -84,7 +83,6 @@ &reference.pthreads.entities.worker;
-