No.4ベストアンサー
- 回答日時:
プログラムを起動すると、32ビットアプリなら、メモリのアドレスとして、000 ... 000 ~ 1111 ... 111 (ともに32桁)、すなわち4GBの「仮想」メモリ空間を持ちます。
プログラムは、この32桁のアドレスを使って、メモリに展開したデータにアクセスします。
(変数aには「0000..0001」変数bには「000 ... 0100」など。)
この4GBの自由に使ってもいい仮想的なメモリ空間を割り当てられる単位が、「1プロセス」です。
スレッドは、このプロセス内で更に分けられる単位です。
たとえば、インターネットブラウザのソースコードにネットワークからページを読み込む部分があると、取得開始から取得終了までの数秒間はそこでプログラムがブロックされてしまいますが、「スレッド」なる支流を作ってあげてそこで読み込みをさせると本流はブロックされません(だからその間にキャンセルボタンで命令だってできる)。
同一プロセス内の各スレッドは、アドレス空間が共有できるため、ネットワークからの読み込みデータを本流(メインスレッドという)で参照することもできます。
(↑重要!プロセス間では参照できませんよね?上のアドレス空間を見れば、000...000 ~ 111...111までどれを見ても自分の管理する世界しか指さないので)
まとめると、
プロセスはOSが管理するメモリ割り当て単位。
スレッドはアプリケーションが管理する、
同一アプリケーション内の並列処理の単位です。
複雑なことは本格的に勉強するといいでしょう。
ありがとうございます。分かりやすいです。スレッドは、アプリケーション内部のものなんですね。勉強してみたいと思います。
ありがとうございました。
No.5
- 回答日時:
皆さん詳しくお答えのようですので、具体例を。
私はあるCADデータの表示ソフトを作っています。
このソフト自体は、Windowsでは一つのプロセスと
して起動されます。
このプロセスは、ユーザーのマウス操作などに反応
して表示エリアを変えたり、倍率を変えたりとい
う仕事をするスレッド一つで成り立っていました。
この時点ではまだプロセスとスレッドを区別するほ
どの意味はなかったです。
ところが、膨大な量の描画をすると、その処理時間
が何十秒にもなってしまうことがあり、ユーザーが
描画を中止したくても、順にしか処理されないので、
仮にツールバーに描画中止ボタンを配置しても、
描画中には押したりできません。
そこで、描画用のスレッドを作成して、別に実行
することにしました。これで、画面に絵を出力して
いる間でも、ツールバーに設けた描画停止ボタン
を押して中断できるようになりました。
なお、Windowsとしてはジョブは印刷、タスクは
指定時刻などに実行されるスケジュールされた何か
の実行という意味で使っているようですが、他の
システム(UNIXなど)ではまた別の意味で使っている
こともあります。
なるほど、操作を受け付けなくなるアプリってありますね。そういうときに別スレッドにすると良いわけですね。
>システム(UNIXなど)ではまた別の意味で使っている
>こともあります。
OSによっても用語の意味が違う場合があると言うことですね。それで分かりにくい面が出てくるのかも知りませんね。
大変参考になります。ありがとうございました。
No.3
- 回答日時:
「Windowsはなぜ動くのか」という本、
分かりやすくていいと思います。
ただ、どうしても x86(Pentium)ベースなので
セグメント云々のメモリ管理の話がややこしいですが、
興味のあることだけでも本屋で立ち読みするとか、
図書館で借りてきて読むと、
単に単語(プロセス、スレッド、…)の意味を「覚える」のでなく、きちんと理解できると思いますよ。
図書館で借りてみようと思います。メモリ関係は、複雑そうですね。アドレスとか出てくると頭が痛くなっちゃいます。
ありがとうございました。
No.2
- 回答日時:
OSの基本概念の本を読むかですね。
http://www11.tok2.com/home/manabi/dic/term_j_ta. …
参考URL:http://tooljp.com/qa/C4104E55B4914C7449256A9F001 …
No.1
- 回答日時:
プロセスは、OSがプログラムを管理するときの単位。
スレッドは、プロセスの中で動くプログラムの単位。
例えば、なにかソフトを起動します。
すると起動したソフトのプロセスができます。
同時にそのプロセスの中でスレッドができます。
スレッドは複数できる場合もあります(マルチスレッド)。
>ジョブ、プロセス、タスクはどう違うのでしょうか?
については、下記URLに行って検索してみてください。
参考URL:http://yougo.ascii24.com/
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(学校・勉強) この中で間違ってある説明はありますか?詳しい方に教えていただきたいです。 A. 1つのプログラムが複 2 2023/07/14 01:15
- 会社・職場 世の中は結果がすべて 15 2022/05/20 20:46
- 政治 私は文部科学省ヘ入り込んで投稿した私の建議文を彼らが私の依頼まましましょうか。? 2 2023/08/22 07:08
- 環境学・エコロジー 二酸化炭素の排出 1 2023/08/07 16:40
- その他(教育・科学・学問) 「技術(テクノロジー)」と「工学(エンジニアリング)」の違いについて 5 2023/02/03 09:54
- 医学 医学に詳しい方にお尋ね致します。 摂取した水分は最終的には尿になりますが、そのプロセスがよく分かりま 4 2023/01/16 14:57
- 哲学 真実の信仰=真理の探究 1 2022/11/26 09:03
- Windows 10 バッチファイルでのエクスプローラー終了 1 2022/05/30 14:32
- CPU・メモリ・マザーボード インテルCPUの世代ごとのデスクトップとノートのコア数についてこれで正しいですか?(*´ω`*) 1 2023/01/07 14:44
- グループウェア slackについて取り急ぎ教えて頂きたいことがあります 2 2022/04/08 09:05
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
バックグラウンドのプロセスの...
-
Visual C++からpingを実行して...
-
explorer.exeが異様にメモリを食う
-
ウィンドウのタイトルからプロ...
-
API関数 GetExitCodeProcess
-
プロセスIDからウィンドウハ...
-
WINのタスクマネージャの強制終了
-
タスクマネージャーのプロセス...
-
Linuxでのスレッド間メッセージ...
-
EXE間でデータを受け渡し時のka...
-
C++のプログラムをバックグラウ...
-
完全な乱数を生成する方法
-
WebBrowserでPDF表示でのトラブル
-
VB.NET 自プログラムのプロセス...
-
Windowsでのfork方法
-
ADOでアクセスのレコードに...
-
sleep関数の精度について
-
別のプロセスの関数を呼び出す...
-
VBでエクセルを起動し、プロ...
-
C#でのbatファイル実行結果取得
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バックグラウンドのプロセスの...
-
explorer.exeが異様にメモリを食う
-
なぜ女性は男性が忘れたことを...
-
タスクマネージャーのプロセス...
-
プロセスのアタッチ・デタッチ...
-
非表示になったエクセルは?
-
Process.Startの戻り値を後で取得
-
C#でのbatファイル実行結果取得
-
プロセスIDからウィンドウハ...
-
c言語でプロセスIDを調べたい
-
Linuxでのスレッド間メッセージ...
-
プロセスIDの取得方法について
-
ADOでアクセスのレコードに...
-
怪しいプロセス教えてください。
-
vb.netでEXCEL起動がうまくでき...
-
別のプロセスの関数を呼び出す...
-
C++のプログラムをバックグラウ...
-
Visual C++からpingを実行して...
-
VBS(WSH)で開いたIEのウィンド...
-
IISがフリーズ
おすすめ情報