• ベストアンサー

PHPでマルチスレッドプログラミングは可能ですか?

もしくは、他のLL(Ruby, Python等)でマルチスレッドプログラミングが可能な言語はなんでしょうか?

  • PHP
  • 回答数2
  • ありがとう数4

質問者が選んだベストアンサー

  • ベストアンサー
noname#94983
noname#94983
回答No.2

>Python も mod_python とかで動かしていれば、スレッドは使えないということでしょうか? いや、Pythonは、threadモジュールというスレッド生成のモジュールがあってそれで対応しているから、問題なく使えるはず。ただ、mod_pythonで既にサーバー内の1スレッドとしてマルチスレッドに動作しているのに、そんなことをする意味があるのか?という気もする。PHPで「無意味」といったのは、そういう意味(無理ではなく、意味がない、ということ)。 サーバーにモジュールで組み込まれているものは、クライアントからアクセスされた段階でスレッドとして起動する。で、その結果をクライアントに返した段階で処理は終了する。スレッドで起動されたプログラム内から別スレッドで何かの処理をしたとして、メインスレッドが結果をクライアントに返した段階でクライアントの要求は完了する。サーバー側で、それとは別にしこしこ処理をしていたとして、それはもう何もクライアントには戻す手段がない。その処理結果も含めてクライアントに返すなら、別スレッドにする意味がなくメインスレッド1本で完結する。クライアントに返さず、ただサーバー内で事後処理をするなら別スレッドでなく別タスクで起動すればよい。いずれにせよ、サーバーにモジュールで組み込まれた言語をマルチスレッドで実行しなければならないケースが思いつかない。具体的にどういうケースを想定してマルチスレッドといっているんだろうか? サーバーのモジュールとしてでなく、RubyやPythonはアプリケーションとして実行することも多い。そうしたときに活躍するものだと思うんだが。

sweepea
質問者

補足

度々、ご回答ありがとうございます。 すいません。この質問をするに至った経緯を簡単に補足しておきます。 まず、私は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アプリケーションの開発をするだけなら、あまり難しいことに 手を出さないほうが懸命なのでしょうか?

その他の回答 (1)

noname#94983
noname#94983
回答No.1

RubyやPythonは、Threadクラスなどがあってマルチスレッド処理が可能だったと思う。PHPは、今のPHP5などはCGIで起動すれば可能だったと思うが、実質、サーバーのモジュールとして起動しているから無意味だろう。

sweepea
質問者

お礼

ご回答ありがとうございます。 ということは、Python も mod_python とかで動かしていれば、スレッドは使えないということでしょうか?

関連するQ&A

  • マルチスレッドプログラミングについて

    C言語のマルチスレッドについて学びたいと思っています。 「猫でも分かる」のマルチスレッドの項を見てみましたが、 もうちょっと色々コードのサンプルを見てみたいと思いました。 そこで他にマルチスレッドを解説しているサイトを探そうと検索してみても、 書籍情報ばかりが出てきて、なかなか解説サイトを探せませんでした。 マルチスレッドの簡潔なサンプルが載っているようなサイトがあれば教えていただけたらと思います。

  • プログラミング言語、Pythonなどについて

    プログラミングスクールに通いプログラミングを習いたいです。言語を決めているとこですが、単に需要があったり稼げるというのを目にして安易な理由ですがPythonに興味があります。しかし、Pythonが主とするAIの世界は難しく地頭も相当よくないとききました、PythonやAIに特化したスクールもありましたが、転職保証するサービスはないようですが就職はできるでしょうか。これまた安易な考えですがいずれ独立したいですが、調べたイメージではAIの仕事はチームプレイなイメージがありますが、仕事は簡単には舞いこんでこないでしょうか。もちろんどの言語も甘くないでしょうが、まずは就職するにしても独立するにしても、 PythonやらAIが特に難しいならまだ比較的案件が多そうな他の言語(Ruby、PHPなど)にしようかとも考えてますがどうでしょうか。また、PHPやRubyならまだ可能性や案件は多いでしょうか?体験談や知識、意見を聴きたいです宜しくお願い致します。

  • 非同期プログラミングは必ずマルチスレッド?

    非同期プログラミングは必ずマルチスレッドプログラミングになりますか? ここでいう非同期プログラミングとは、 何かのメソッドを実行してその処理(処理Aとする)の結果を待たずに次の処理Bを実行できて、処理Aが終わったらコールバックやデリゲートで、あらかじめ決められたメソッド(finishとする)が呼ばれるといったものです。 処理Aを実行するメソッドを呼ぶ ↓ すぐに処理Bを実行開始(このときバックグラウンドで処理Aが走っている) ↓ 処理Aが終了したのでfinishメソッドが実行される 例えば、Objective-CのNSURLConnectionで非同期通信するときのようなやつです。 こういった非同期プログラミングは、必ずマルチスレッドを使うことになりますか? 普通、別スレッドで処理させるときはスレッド用のライブラリを使うなどして明示的にマルチスレッドプログラミングをしますが、上のように非同期のメソッドを使うと、その裏で自動的に別のスレッドが動くのでしょうか。 それとも、単一スレッドのみで、非同期プログラミングできるでしょうか。 なお、特殊な言語やOSによっては、いくらでも可能性があると思いますので、 メジャーな環境(Windowsや、スマホ) のみに限定してお願いします。言語で言うと、C、C++、Objective-C、Javaあたり。 また、上の「処理A」が終わったとき、メソッド「finish」が呼ばれるとすると、 処理Bの実行中にどのようなタイミングでfinishが呼ばれるのでしょうか。 処理Bはどのような形でfinishに切り替わるのでしょうか。いきなりfinishに処理を奪い取られるのでしょうか

  • スクリプト言語としてのPHPについて

    PHPについてほとんど知らない者です(他の言語もほとんど知りませんが・・・)。 Webで検索していると、Webアプリを開発するLL言語としてPHP, Ruby, Python, Perlを使っているというケースをよく目にします。一方、タスクを自動化するためのスクリプトを記述する言語としては、Ruby, Python, Perl, シェルスクリプトで記述しているケースをよく目にします(Linux/UNIX系)。 そして、PHPはWebアプリ開発言語としてかなりのシェアを占めていそうだが、スクリプト言語としてはそんなにシェアを占めていないのかな? という印象を持ちました。 そこでお聞きしたいのですが、スクリプト言語としてのPHPは他の言語と比較してどのような感じなのでしょうか? PHPはWebアプリ開発言語としてだけではなく、スクリプト言語しても開発現場でRuby, Perl同様に使われているといった感じなのでしょうか? あるいは、WebアプリはPHPで書いてるけど、スクリプトはPHP以外(Ruby, Pythonなど)で書いているという方は結構いるのでしょうか?その場合、何故PHPを使わずに別の言語を使っているのでしょうか? ご意見をお聞かせください。

    • ベストアンサー
    • PHP
  • マルチスレッドプログラミングの良技術書籍

    C++言語を用いてマルチスレッドを用いた開発を行う予定ですが、 当方マルチスレッドを用いた開発の経験がなく、 事前に前提知識を付けておきたいと思うのですが、 マルチスレッドプログラミングにおいて、 この書籍が分かりやすい、もしくはバイブル的な書籍があれば、 ご教示お願い致します。 ちなみに開発環境はVC++2005です。

  • 初めてのプログラミング、rubyかphpか

    初めてプログラミングを学ぶのですが、rubyかphpかで迷っています。 現在のところの目的は、HP作成で、このokwaveのようなフォームを多用したサイトを作りたいと思っています。となると、PHPが向いているのでしょうが、「PHPはテンプレート言語だからプログラムの知識がつかない(他の言語に手を出すときにつまづく)」と聞きます。 そこで、RUBYも選択肢に入れています。 あと、WEBアプリ開発となると、PERLという言語もあるそうですが、PHPとどこが違うのですか? 回答お願いいたします。

  • I pad にキーボードを付けてプログラミングの勉

    I pad にキーボードを付けてプログラミングの勉強をしたいとおもうのですが、 アプリで pc版に似た開発環境ってありますか? とりあえず言語は問いませんが、 C Python Ruby ができればよいです。

  • おすすめのプログラミング言語を教えて下さい

    昨日、プログラミング言語について質問させて頂きました。その結果、basic、Ruby, JavaScript, Python, Perl, PHP、C,C#,を勧められました。 しかしどれから勉強すればいいかわからず、また質問しようという考えにたどり着きました。 この中の言語ではどれがお勧めでしょうか? また、basicはVB、VBAなどがあり、どれのことを指しているのかが理解出来ないのでそのあたりも教えてくださると嬉しいです。

  • マルチスレッドプログラミングの参考書

    スレッドやプロセスなどの意味は理解しているつもりです。 実際プログラミングをする技術を身につけたいと思っていますが おすすめの、勉強(参考)となる書籍はありますでしょうか? プラットフォームはLinux系です。 pthreadやselectを使用できればよいです。 最終的にどんなことがしたいかといいますと マルチスレッド対応したソケットプログラムを 作ってみたいのです。 シングルスレッドであれば、ある程度作れるのですが マルチスレッドではどのように作成していいのか・・・ 参考になりそうなHPでもいいのでよろしくお願いします。

  • マルチスレッドプログラミングの利点について

    はじめまして。 質問があります。 現在マルチスレッドプログラミングについて学習しているのですが、 学習を進めていくうちにある疑問が思いつきました。それは、 マルチスレッドで実装した方がよい場合とシングルスレッドで実装 した方がよい場合の区別がよくわからないということです。マルチスレ ッドで実装する利点は、例えば、応答性を向上させるとか、 入出力操作が関わっているときにCPUの空き時間を利用して別スレッド で処理を行わせることによってスループットを向上させることぐらいしか思いつきません。また、CPUが1個しかない環境では、 CPUをフル活動するようなプログラムでは、下手にマルチスレッドで 実装するよりもシングルスレッドで実装したほうが排他制御しない 分だけ処理スピードは上であると思っているのですが、間違いでしょうか?マルチスレッドで実装した場合の利点は上述したこと以外にも 何かあるのでしょうか?ご教授お願いします。

    • ベストアンサー
    • Java

専門家に質問してみよう