• ベストアンサー

スレッドとプロセスについて

こんにちわ。 Windowsにあるスレッドとプロセスという機能についてお聞きしたいと思います。 いろいろ調べてはみたんですが、いまいち具体性がなくてわからないのです。 両方とも抽象的な概念なのでしょうか?専門的かつわかりやすく教えていただけないでしょうか。 それと、調べていて疑問に思ったことがあります。 例えばWebサーバなどで、外部からの攻撃で落とすことができるようなセキュリティホールがあった場合、落ちる単位がプロセスなら、負荷攻撃で済み、スレッド化しているとサーバ自体がダウンしてしまうことになる。 というふうに書いてありました。なぜでしょうか。 よろしくお願い致します。

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

  • ベストアンサー
  • xjd
  • ベストアンサー率63% (1021/1612)
回答No.1

>例えばWebサーバなどで、外部からの攻撃で落とすことができるような >セキュリティホールがあった場合、落ちる単位がプロセスなら、負荷 >攻撃で済み、スレッド化しているとサーバ自体がダウンしてしまうことになる。 >というふうに書いてありました。なぜでしょうか。 たとえばWebサーバならApacheが定番ですが、Apache2.0からマルチプロセスに 加えて、マルチスレッドでも動作する様になりました。 詳しく説明しだすと大変なので簡単ですが、 取り敢えず、プロセスは一つのプログラムと思ってもらってよいです。 Apacheを起動すると、複数のApacheが独立したプロセスとして動きます。 たくさんのパソコンからWebサーバにアクセスがあっても、複数の Apache(プロセス)が分担して受け付けて処理してくれる訳です。 各プロセスは独立していますから、そのうち一つがこけてしまっても Webサーバは問題なく動き続けてくれる訳です。 但し、各プロセスはそれぞれ自分だけのメモリ(アドレス空間)が必要 なので、たくさんプロセスを動かす時はそれだけメモリ等のリソース が必要になります。 また、複数のプロセスが同時に動くと言っても、実は瞬間的にプロセス が切り替わっている訳で、パソコンにとって処理は重たいです。 一方、スレッドとは1プロセス内に生成される処理の単位です。 マルチスレッドとは一つのプロセス内に複数のスレッドが同時に 動作する事です。 分かりやすく言うと一つのプログラム(プロセス)の中で、 あるサブルーチンが複数同時に動く様なイメージです。 マルチプロセスの様にプロセスを切り換える必要がないので、処理 も高速です。 また、1プロセスが確保したメモリを、各スレッドが共有して動作 する(共有メモリ)為、マルチプロセスよりも少ないメモリで動かす 事が可能です。 但し、各スレッド間でメモリを共有するので、一つのスレッドの動作 がおかしくなって、メモリのデータを破壊すると、他のスレッドが 道連れになってプロセス全体がクラッシュする可能性があります。 その為、マルチプロセスに比べて、マルチスレッドは安定製の面で 不利です。 ついでですが、Apache2.0からは前述のマルチプロセスモデル、 マルチスレッドモデルに加えて、ハイブリッドモデルというモード もあります。 マルチプロセスの各プロセス毎に複数のスレッドを動かせるモードです。

hiko758
質問者

補足

とても詳しく教えていただきありがとうございます。 プロセスはなんとか理解したんですが、 スレッドの方がまだよくわかっていないです。 Webサーバに多くのパソコンからアクセスがあった場合、 マルチスレッドだとどういうことになるんでしょうか。 そのあたりをもう少し詳しくお願いできますでしょうか。 よろしくお願い致します。

その他の回答 (3)

  • xjd
  • ベストアンサー率63% (1021/1612)
回答No.4

>Webサーバに多くのパソコンからアクセスがあった場合、 >マルチスレッドだとどういうことになるんでしょうか。 >そのあたりをもう少し詳しくお願いできますでしょうか。 Webサーバにとっては、やる事は一緒です。(クライアントからのアクセスを処理する) #1でも説明しましたが、ようするにWebサーバにおける、マルチスレッドモデルの一番の利点は、 マルチプロセスモデルと比較して、少ないメモリでたくさんのアクセスを処理できるという事ですね。(プロセスは一個だから。) だけど、こける時は全体が道連れになる可能性が高いという事です。 Apacheをマルチプロセスモデルで運用している場合、クライアントからのアクセス数に応じて、プロセスがどんどん増えていくので、サーバの負荷も増えていきます。(プロセス数の上限はありますが。) あとは、#2さんや、#3さんの楽しいたとえ話を期待してください。^^

  • ymmasayan
  • ベストアンサー率30% (2593/8599)
回答No.3

No.1の回答が素晴らしいので、別の観点から。 プロセスを貸しゴーカートとしましょう。係員はOSです。 ゴーカートは、3人乗りとしましょう。1人で乗る人も、2人で乗る人もいます。 運転手は1人ですが交代しても構いません。 ここでゴーカートがプロセス、お客さん1人1人がスレッドです。 (1人で乗っているときはスレッドとは言いませんが) 1プロセス2スレッドの場合、運転手が交代する事でアクティブなスレッドが切り替わります。

  • kusukusu
  • ベストアンサー率38% (141/363)
回答No.2

プロセスに関しては、xjdさんの回答が、大変わかりやすく、文句の付け所のないものなので、スレッドについてもう少し簡単に補足します。 > 分かりやすく言うと一つのプログラム(プロセス)の中で、 > あるサブルーチンが複数同時に動く様なイメージです。 例えばプロセスを人としましょう。 とすればスレッドは一つ一つの仕事(動作)です。 Aさんは、シングルスレッドな人間だとします(笑) すると、Aさんは、ご飯を食べ出すと他には何も出来ません。 話をすることも出来なければ、テレビを見ることも出来ません。 今度は、Bさん。Bさんは超マルチスレッドな人間です。 ご飯食べながら人と話をすることも出来ますし、更にご飯を食べながら、人と話をしながら、テレビを見ながら、新聞を読める!と言う事が出来ます(笑) # 呼吸は?などの突っ込みはお断りします(笑)

関連するQ&A