2013-06-04 17 views
5

多少の努力の結果、私は複数のWebSocketからの入力を受け取り、それを単一のTCPソケットに渡すPHPマルチスレッドサーバーを設定することができました。 これをpthreadsで実行し、Stackableオブジェクトを配列として使用することができました。スレッド、ワーカー、ミューテックス、スタック可能の違いは?

今、次のステップは、私がやっていることを理解することです。私はここのどこかで、マルチスレッドはあなたがやるだけのことではないということを読んでいます。その理由から私はコーディングを進める前にもっと深く掘り下げたいと思っています。

A Worker Thread has a persistent statepthreads.org)の意味は次のとおりです。作業員は範囲外になっても稼働し続けますか? Stackableとの関係は何ですか?

PHPマニュアルでは、ワーカースレッドをスレッドよりも使用する必要があります。なぜですか?

私の質問が広範ではないことを願っています。

答えて

13

ワーカースレッドは、ワーカースレッドを開始すると、変数が有効範​​囲外になるかワーカーがシャットダウンするまで実行可能です。

オンラインで複数のソースから複数のページをダウンロードするスクリプトの例をご紹介します。小さなスケールでは、離れてしまう可能性があります。また、複数のスレッドを持ち、各スレッドが単一の要求を処理し、コンテンツを処理する。しかし、通常は、ハードウェアと環境が管理できる数のワーカーを起動し、コンテンツの要求と処理を実装する代わりに、単一のリクエストを作成するためのスレッドを開始するか、 Stackableとして。ワーカーを使用する場合、各リクエストはスレッド化コンテキストの初期化に要しません。このコンテキストでの永続性は、各Stackableが$ this-> workerを読み込み、グローバル(クラスレベルの静的変数を含む)スコープのすべて/任意のものにアクセスできるということを意味します。実際にはStackableは単に文脈を共有しているに過ぎない。

ミューテックスとコンドルは、ハードコア・ポスックス・スレッドの中毒者のために、pthreads自体の開発中に私の目的のためにあります。通常のユーザーは、この機能を実際に使用する必要はありません。相手のposix関数と同じように文書化されていますが、元のドキュメントの多くはまだ適用されています。 MutexとCondは、使い慣れた機能を中心とした薄いラッパーであり、実際にはJoe Bloggsを目指していません。

オブジェクトの安全な読み書きをするためにミューテックスが必要かどうか疑問に思っています。これはそうではありません。安全はpthreadに組み込まれています。

作業者がスレッドを使用する必要があります。この例から、小さなスケールで。さらに、それをサポートするハードウェアがあれば、スレッドはワーカー(およびスレッド)を作成することができます。これは、より複雑なシステム設計の可能性に役立ちます。また、これで素晴らしいことが分かるかもしれません。その場合、タスクごとにオブジェクトの初期化(スタック可能)のオーバーヘッドなしにスレッドをワーカーのように動作させるようプログラムすることができます。作業者はスレッドであり、スレッドの機能のうちのいくつかのみがスタック可能リストを実行するためにハイジャックされています。スレッドとワーカーの同期方法に微妙な違いがあります。 。しかし、あなたのawesomenessが標準モデルを避ける方が良いと思うなら、PHPでWorkerパターンを実装するためにThreadオブジェクトからの同期が必要になります。

実際には、スレッディングを見ているときに、一度に2〜3つ以上のものを実行したいと思っている場合は、いくつかのことを行う方法を見つけた可能性があります。したがって、pthreadsパッケージの一部としてWorker/Stackable機能を提供することは意味があります。なぜなら、別のコンテキストでたくさんのものを実行する方が適しているからです.pthreadsの助けを借りても、これを書くことは難しいでしょう。

+0

ありがとうございました!これは大きな助けになります。私のコードが動作していた間、私は道を離れていた。私はまだプレーンなThreadオブジェクトをいつ使用するのかと思っています。 – marlonp33

+1

さて、私はスレッド上のいくつかの情報で答えを更新しました...うまくいけば、あなたの質問に完全に答えます。 –

+0

あなたが何を言っているのか理解するためには、これを何度も読まなければなりませんでした。しかし、ありがとう! – Nerrve

関連する問題