• ベストアンサー

スレッドとプロセスの違い

今晩は。 早速ですが、javaのプログラムを勉強中です、スレッドとプロセスどう違うのでしょうか。 本などを読んでいろいろと調べましたが良く分かりません、宜しくお願いします。

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

  • ベストアンサー
  • galluda
  • ベストアンサー率35% (440/1242)
回答No.2

がると申します。 とりあえずまず「スレッドとプロセスは違うモノ」です。 で、簡単に………というのはちと難しいのですが、出来るだけかみ砕いて説明を。 ただ、どうしても深い部分を触らないといけないので、そのあたりご勘弁ください。 まず「マルチタスク」という概念があります。 基本的に、1つのCPUしか乗っていないPCの場合、ある1つの時間軸には1つの処理しかできません。当然ですが。 ただ、その「1つの処理」にかかる時間はとても小さいので「擬似的に」複数の処理が並列で走っているように見せかける事ができます。 この辺をマルチタスク、なんて呼称してました(過去形にしていいのかは微妙ですが、実際現場でこの単語を聞く事がきわめてレアなので)。 で、このマルチタスクを別名「マルチプロセス」なんて言い方もしました。 で。とりあえず見せかけ上ではあるものの、各プロセスは「平行して」動いているわけです。 で、ここで問題になるのが「ある1プロセスがとてつもない悪さをしてメモリをがりんがりんと変に書き換えたとき」という状況があります。 で、そういった状況をなくすために、通常OSレベルで、各プロセスに「プロセス空間」というものを割り当てます。割り当てる資源はメモリなのですが。 この「プロセス空間」のおかげで、ド最悪「お行儀の悪い」プログラムを実行しても、周りのプログラムを巻き添えにせずにすみます。 ここまでが大雑把にプロセスのお話です。 さて。問題がありまして。 プロセスを1つ立ち上げるためには、当然ながら「プロセス空間を切り出してそれを割り当てて」という処理が自動で走ります。プロセスが一つ死ぬときはもちろんその逆が。 …この処理が、なかなかに重いのです(特にSolaris)。 また、プロセスは空間をそれぞれ隔てているために、「不可侵」であるには便利なのですが、「データをやりとり」したいときはある程度面倒です(この辺興味が有れば「プロセス間通信」でご検索を)。 そこで生まれたのがスレッドです。 スレッドは、1プロセスの中に複数生成できます。また、1プロセス内であるために、基本的にメモリを共有しています。 そのために… ・プロセスと比較して、スレッドの生成は処理コストが安い ・メモリを共有しているので、プロセス間通信と比較して、やりとりがしやすい などのメリットがあります。 なお、2番目のメリットはそのままデメリット化しますので(この辺はスレッドセーフなどのキーワードでご検索ください)ご注意のほどを。 このあたりは…多分言語としてのJavaを学ぶだけだと、ちょっと手に入りにくい部分なのかもしれないのですが。 ちょっとだけ手をひろげて、いろいろな技術書を読むと出てくるかもしれません。 以上なにかの参考にでも成れば幸いです。

htgo
質問者

お礼

galludaさん、早速の回答有難う御座います。 分かり安く説明して頂いていますが、私のコンピュターに関する基礎的知識がやはり不足しているようです。 これが質問になっているかどうかも良く分からないのですが、プログラム的には、スレッドはステップ的には ○○程度(どの程度の塊)、プロセスはこの程度という言い方は出来るのでしょうか。

その他の回答 (3)

回答No.4

>プログラム的には、スレッドはステップ的には >○○程度(どの程度の塊)、 >プロセスはこの程度 >という言い方は出来るのでしょうか。 できません。 プログラムの大きさや、ステップ数の大きさによって (ある一定量より大きさより上は)プロセス、(下は)スレッド と呼び方が変わるものではありません。 javaコマンドから実行したプログラムの数だけ(javaの)プロセスができます。 そしてそのjavaプロセスの上でスレッドが動いています(複数の場合もある)。

回答No.3

すみません。寝ぼけてました。 CGI などがプロセス単位で動く。 Java がスレッド単位で動く。 それが Java の利点ということでした。

回答No.1

同じと思います。 Java のプログラムはスレッド単位で動いています。main メソッドなどから始まるプログラムもひとつのスレッドです。 マルチスレッドプログラミングのために Thread クラスや Runnable インターフェースなどがある、ということだと思います。