30

スレッドの使用についてはよくわかりませんが、php の pthreads を調べたところ、非常に興味深く、簡単に、または思ったより簡単に思えます...

例を検索してドキュメントを調べましたが、スレッドを使用することが実際に有益な場合の実際の例は見つかりませんでした.メールを送ることかもしれません。

しかし、ログ エントリの書き込みについてはどうでしょうか。データベースへの挿入?(ユーザー アクティビティの追跡など) データベースからの取得 (スレッドからデータを返すことはできますか?)

これによりパフォーマンスが向上しますか、それともスレッド作成のオーバーヘッドが大きすぎますか? (ワーカープールを使用してオーバーヘッドを減らすこともできますが、私は思う...)

アドバイスや例は大歓迎です!

4

1 に答える 1

106

ディストリビューションに含まれ、githubで入手できる多くの例があります。

https://github.com/krakjoe/pthreads/tree/master/examples

これらの例には、汎用スレッドプール、マルチスレッドソケットサーバー、SQLWorkerなどが含まれます。

pthreadsが作成するスレッドは、Zend自体がマルチスレッドSAPIを介してサービス要求に設定するスレッドと同じくらい健全で安全です。これらはすべて同じ機能に加えて、高レベルのスレッドAPIに期待するすべての機能と互換性があります(ほぼ)。

シェアードナッシングアーキテクチャの奥深くにスレッドを実装することには常に制限がありますが、自由に使える物理リソースをより適切に使用するという点での利点だけでなく、特定のタスクに対するPHPの全体的なユーザビリティがその環境を回避します。

pthreadに含まれるオブジェクトは、他のPHPオブジェクトと同じように機能し、オブジェクトへの参照を使用して、任意のコンテキストからメソッドの読み取り、書き込み、および実行を行うことができます。

あなたは正しい方向に正確に考えています。効率の尺度は、アプリケーションが実行するスレッドの数ではなく、アプリケーションの主な目的を最もよく果たすためにそれらのスレッドがどのように利用されるかです。労働者は、あなたが彼らを使うことができるところならどこでもそうするのは良い考えです。

あなたが尋ねた特定の事柄に関しては、LoggingWorkerは良い考えであり、機能します。意味がないのでそのストリームを共有しようとしないでください。Workerがログファイルまたはデータベース接続を開いた場合、完全に安定します。それによって実行されるスタッカブルはそれらにアクセスできます。SQLWorkerが例に含まれていますが、これも、APIに適切な非同期APIがない場合、またはマルチスレッドプログラミングのフローを好む場合のもう1つの良いアイデアです。

より良い、またはより正しい答えは得られません。私は自分でpthreadを作成しました。

于 2013-01-03T19:41:15.487 に答える