- ベストアンサー
PHPでマルチスレッドプログラミングは可能ですか?
もしくは、他のLL(Ruby, Python等)でマルチスレッドプログラミングが可能な言語はなんでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
>Python も mod_python とかで動かしていれば、スレッドは使えないということでしょうか? いや、Pythonは、threadモジュールというスレッド生成のモジュールがあってそれで対応しているから、問題なく使えるはず。ただ、mod_pythonで既にサーバー内の1スレッドとしてマルチスレッドに動作しているのに、そんなことをする意味があるのか?という気もする。PHPで「無意味」といったのは、そういう意味(無理ではなく、意味がない、ということ)。 サーバーにモジュールで組み込まれているものは、クライアントからアクセスされた段階でスレッドとして起動する。で、その結果をクライアントに返した段階で処理は終了する。スレッドで起動されたプログラム内から別スレッドで何かの処理をしたとして、メインスレッドが結果をクライアントに返した段階でクライアントの要求は完了する。サーバー側で、それとは別にしこしこ処理をしていたとして、それはもう何もクライアントには戻す手段がない。その処理結果も含めてクライアントに返すなら、別スレッドにする意味がなくメインスレッド1本で完結する。クライアントに返さず、ただサーバー内で事後処理をするなら別スレッドでなく別タスクで起動すればよい。いずれにせよ、サーバーにモジュールで組み込まれた言語をマルチスレッドで実行しなければならないケースが思いつかない。具体的にどういうケースを想定してマルチスレッドといっているんだろうか? サーバーのモジュールとしてでなく、RubyやPythonはアプリケーションとして実行することも多い。そうしたときに活躍するものだと思うんだが。
その他の回答 (1)
RubyやPythonは、Threadクラスなどがあってマルチスレッド処理が可能だったと思う。PHPは、今のPHP5などはCGIで起動すれば可能だったと思うが、実質、サーバーのモジュールとして起動しているから無意味だろう。
お礼
ご回答ありがとうございます。 ということは、Python も mod_python とかで動かしていれば、スレッドは使えないということでしょうか?
補足
度々、ご回答ありがとうございます。 すいません。この質問をするに至った経緯を簡単に補足しておきます。 まず、私はPHPをメインに利用しております。かつてはPerlを利用していましたが、 当時は「スレッド」という言葉の意味さえ知りませんでした。 Rubyはちょっといじってみた程度で、Pythonに関しては1行も書いたことがありません。 ということで、もうお気づきかもしれませんが、マルチスレッドプログラミング というものをやったことがありませんし、マルチスレッドプログラミングが どういものかという認識もかなりあやしいです。 さて、先日、『Java言語で学ぶデザインパターン入門』という本を流し読みしていると シングルトンパターンのページに以下のようなコード例がありました。 (インスタンス取得メソッド内) if (this.singleton == null) { this.singleton = new Singleton(); } return this.singleton; ※手元に本がないのと、Javaの知識もないので間違ってるかもしれません。 で、「このコードはif文の判定が甘く、別スレッドが介入する可能性が あるのでスレッドセーフではない」みたいなことが書かれていました。 ほぼPHPオンリーな私は、かなり衝撃を受けました!! PHPのシングルトンパターン時には、実際上記のようなコードを書きます。 当然、マルチスレッドではないので、スレッドセーフ等意識したことありません。 このマルチスレッドプログラミングというものがどういうものなのか、 理解してないのですが、非常にパワフルな印象を受け、興味をいだきました。 とはいえ、できるだけライトウェイト言語のみを使っていきたい私には、 「では、明日からJavaで」という気にはなれず、今回の質問に至りました。 イメージとしては、コマンドにアンパサドを付けてバックグラウンド実行するような 記述を PHP の処理内にうじゃうじゃと書くと汚くなるので、マルチスレッド機能を 用いれば、完結になるのかな?と考えてます。(イメージ的に) ↑間違ってますか? それとも、LLでWebアプリケーションの開発をするだけなら、あまり難しいことに 手を出さないほうが懸命なのでしょうか?