• ベストアンサー

プロセスとスレッドはどう違いますか?教えて下さい。

プロセスとスレッドは、どう違うんでしょうか?また、ジョブ、プロセス、タスクはどう違うのでしょうか? また、こういうことを知りたいと思ったらどういう本を調べればよいでしょうか? よろしくお願いします。

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

  • ベストアンサー
  • Xaval
  • ベストアンサー率58% (61/105)
回答No.4

プログラムを起動すると、32ビットアプリなら、メモリのアドレスとして、000 ... 000 ~ 1111 ... 111 (ともに32桁)、すなわち4GBの「仮想」メモリ空間を持ちます。 プログラムは、この32桁のアドレスを使って、メモリに展開したデータにアクセスします。 (変数aには「0000..0001」変数bには「000 ... 0100」など。) この4GBの自由に使ってもいい仮想的なメモリ空間を割り当てられる単位が、「1プロセス」です。 スレッドは、このプロセス内で更に分けられる単位です。 たとえば、インターネットブラウザのソースコードにネットワークからページを読み込む部分があると、取得開始から取得終了までの数秒間はそこでプログラムがブロックされてしまいますが、「スレッド」なる支流を作ってあげてそこで読み込みをさせると本流はブロックされません(だからその間にキャンセルボタンで命令だってできる)。 同一プロセス内の各スレッドは、アドレス空間が共有できるため、ネットワークからの読み込みデータを本流(メインスレッドという)で参照することもできます。 (↑重要!プロセス間では参照できませんよね?上のアドレス空間を見れば、000...000 ~ 111...111までどれを見ても自分の管理する世界しか指さないので) まとめると、 プロセスはOSが管理するメモリ割り当て単位。 スレッドはアプリケーションが管理する、 同一アプリケーション内の並列処理の単位です。 複雑なことは本格的に勉強するといいでしょう。

Lucifer55
質問者

お礼

ありがとうございます。分かりやすいです。スレッドは、アプリケーション内部のものなんですね。勉強してみたいと思います。 ありがとうございました。

その他の回答 (4)

回答No.5

皆さん詳しくお答えのようですので、具体例を。 私はあるCADデータの表示ソフトを作っています。 このソフト自体は、Windowsでは一つのプロセスと して起動されます。 このプロセスは、ユーザーのマウス操作などに反応 して表示エリアを変えたり、倍率を変えたりとい う仕事をするスレッド一つで成り立っていました。 この時点ではまだプロセスとスレッドを区別するほ どの意味はなかったです。 ところが、膨大な量の描画をすると、その処理時間 が何十秒にもなってしまうことがあり、ユーザーが 描画を中止したくても、順にしか処理されないので、 仮にツールバーに描画中止ボタンを配置しても、 描画中には押したりできません。 そこで、描画用のスレッドを作成して、別に実行 することにしました。これで、画面に絵を出力して いる間でも、ツールバーに設けた描画停止ボタン を押して中断できるようになりました。 なお、Windowsとしてはジョブは印刷、タスクは 指定時刻などに実行されるスケジュールされた何か の実行という意味で使っているようですが、他の システム(UNIXなど)ではまた別の意味で使っている こともあります。

Lucifer55
質問者

お礼

なるほど、操作を受け付けなくなるアプリってありますね。そういうときに別スレッドにすると良いわけですね。 >システム(UNIXなど)ではまた別の意味で使っている >こともあります。 OSによっても用語の意味が違う場合があると言うことですね。それで分かりにくい面が出てくるのかも知りませんね。 大変参考になります。ありがとうございました。

  • z64423
  • ベストアンサー率53% (26/49)
回答No.3

「Windowsはなぜ動くのか」という本、 分かりやすくていいと思います。 ただ、どうしても x86(Pentium)ベースなので セグメント云々のメモリ管理の話がややこしいですが、 興味のあることだけでも本屋で立ち読みするとか、 図書館で借りてきて読むと、 単に単語(プロセス、スレッド、…)の意味を「覚える」のでなく、きちんと理解できると思いますよ。

Lucifer55
質問者

お礼

図書館で借りてみようと思います。メモリ関係は、複雑そうですね。アドレスとか出てくると頭が痛くなっちゃいます。 ありがとうございました。

  • asuca
  • ベストアンサー率47% (11786/24626)
回答No.2

OSの基本概念の本を読むかですね。 http://www11.tok2.com/home/manabi/dic/term_j_ta.html#32

参考URL:
http://tooljp.com/qa/C4104E55B4914C7449256A9F001CA896.html
noname#105965
noname#105965
回答No.1

プロセスは、OSがプログラムを管理するときの単位。 スレッドは、プロセスの中で動くプログラムの単位。 例えば、なにかソフトを起動します。 すると起動したソフトのプロセスができます。 同時にそのプロセスの中でスレッドができます。 スレッドは複数できる場合もあります(マルチスレッド)。 >ジョブ、プロセス、タスクはどう違うのでしょうか? については、下記URLに行って検索してみてください。

参考URL:
http://yougo.ascii24.com/
Lucifer55
質問者

お礼

ありがとうございます。用語集のURL参考にさせていただきました。

関連するQ&A