No.2ベストアンサー
- 回答日時:
がると申します。
とりあえずまず「スレッドとプロセスは違うモノ」です。
で、簡単に………というのはちと難しいのですが、出来るだけかみ砕いて説明を。
ただ、どうしても深い部分を触らないといけないので、そのあたりご勘弁ください。
まず「マルチタスク」という概念があります。
基本的に、1つのCPUしか乗っていないPCの場合、ある1つの時間軸には1つの処理しかできません。当然ですが。
ただ、その「1つの処理」にかかる時間はとても小さいので「擬似的に」複数の処理が並列で走っているように見せかける事ができます。
この辺をマルチタスク、なんて呼称してました(過去形にしていいのかは微妙ですが、実際現場でこの単語を聞く事がきわめてレアなので)。
で、このマルチタスクを別名「マルチプロセス」なんて言い方もしました。
で。とりあえず見せかけ上ではあるものの、各プロセスは「平行して」動いているわけです。
で、ここで問題になるのが「ある1プロセスがとてつもない悪さをしてメモリをがりんがりんと変に書き換えたとき」という状況があります。
で、そういった状況をなくすために、通常OSレベルで、各プロセスに「プロセス空間」というものを割り当てます。割り当てる資源はメモリなのですが。
この「プロセス空間」のおかげで、ド最悪「お行儀の悪い」プログラムを実行しても、周りのプログラムを巻き添えにせずにすみます。
ここまでが大雑把にプロセスのお話です。
さて。問題がありまして。
プロセスを1つ立ち上げるためには、当然ながら「プロセス空間を切り出してそれを割り当てて」という処理が自動で走ります。プロセスが一つ死ぬときはもちろんその逆が。
…この処理が、なかなかに重いのです(特にSolaris)。
また、プロセスは空間をそれぞれ隔てているために、「不可侵」であるには便利なのですが、「データをやりとり」したいときはある程度面倒です(この辺興味が有れば「プロセス間通信」でご検索を)。
そこで生まれたのがスレッドです。
スレッドは、1プロセスの中に複数生成できます。また、1プロセス内であるために、基本的にメモリを共有しています。
そのために…
・プロセスと比較して、スレッドの生成は処理コストが安い
・メモリを共有しているので、プロセス間通信と比較して、やりとりがしやすい
などのメリットがあります。
なお、2番目のメリットはそのままデメリット化しますので(この辺はスレッドセーフなどのキーワードでご検索ください)ご注意のほどを。
このあたりは…多分言語としてのJavaを学ぶだけだと、ちょっと手に入りにくい部分なのかもしれないのですが。
ちょっとだけ手をひろげて、いろいろな技術書を読むと出てくるかもしれません。
以上なにかの参考にでも成れば幸いです。
galludaさん、早速の回答有難う御座います。
分かり安く説明して頂いていますが、私のコンピュターに関する基礎的知識がやはり不足しているようです。
これが質問になっているかどうかも良く分からないのですが、プログラム的には、スレッドはステップ的には
○○程度(どの程度の塊)、プロセスはこの程度という言い方は出来るのでしょうか。
No.4
- 回答日時:
>プログラム的には、スレッドはステップ的には
>○○程度(どの程度の塊)、
>プロセスはこの程度
>という言い方は出来るのでしょうか。
できません。
プログラムの大きさや、ステップ数の大きさによって
(ある一定量より大きさより上は)プロセス、(下は)スレッド
と呼び方が変わるものではありません。
javaコマンドから実行したプログラムの数だけ(javaの)プロセスができます。
そしてそのjavaプロセスの上でスレッドが動いています(複数の場合もある)。
No.1
- 回答日時:
同じと思います。
Java のプログラムはスレッド単位で動いています。main メソッドなどから始まるプログラムもひとつのスレッドです。
マルチスレッドプログラミングのために Thread クラスや Runnable インターフェースなどがある、ということだと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(学校・勉強) この中で間違ってある説明はありますか?詳しい方に教えていただきたいです。 A. 1つのプログラムが複 2 2023/07/14 01:15
- その他(教育・科学・学問) 「技術(テクノロジー)」と「工学(エンジニアリング)」の違いについて 5 2023/02/03 09:54
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- 政治 私は文部科学省ヘ入り込んで投稿した私の建議文を彼らが私の依頼まましましょうか。? 2 2023/08/22 07:08
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- 倫理・人権 酔っ払いが他人にたくさん迷惑を掛けているので、もっとお酒規制を厳しくした方が良いのでは? 2 2022/04/11 11:54
- CPU・メモリ・マザーボード インテルCPUの世代ごとのデスクトップとノートのコア数についてこれで正しいですか?(*´ω`*) 1 2023/01/07 14:44
- Windows 10 バッチファイルでのエクスプローラー終了 1 2022/05/30 14:32
- グループウェア slackについて取り急ぎ教えて頂きたいことがあります 2 2022/04/08 09:05
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
tryの終了
-
tomcat(struts)で起動時に処理...
-
Javaプログラムからポップアッ...
-
Linux上でのTomcatのServletプ...
-
doGetとdoPostの違い
-
Javaでのデバッグコード削除
-
VBScriptでPing
-
Odbcオブジェクトの解放の方法
-
Javaアプリケーション実行の返...
-
C#で別スレッドの終了を知りたい
-
JavaでVBのDOEVENTSと同様の処...
-
二次元配列について
-
CPU使用率が100%になり特定のプ...
-
EXCELマクロ Workbook_BeforeC...
-
Androidアプリで本体の音量変更...
-
GASで、起動時間の最大値を超え...
-
Javaの再帰でメソッド呼び出す...
-
ブラウザを閉じた後のサーバ側...
-
無限ループをわざと作って時計...
-
JavaScriptからJAVAクラスを呼...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
tryの終了
-
Tomcat高負荷時の設定について
-
onBlurとonFocusの処理順序につ...
-
Javaでのデバッグコード削除
-
ラジオボタンの選択判定
-
WPF C#でF10のイベント取得方法...
-
doGetとdoPostの違い
-
SwingUtilities.invokeLater(ne...
-
アコーディオンメニューをアン...
-
数値の定数を付ける時
-
switch文の中に、throws new Ex...
-
JAVAからJAVASCRIPT関数を呼び出し
-
再度、スレッドが実行中かどう...
-
ラベルの表示までが異常に遅い...
-
JavaScriptからJAVAクラスを呼...
-
javaのプログラムが止まる
-
Javaプログラムからポップアッ...
-
C#で別スレッドの終了を知りたい
-
vba Sleep関数について教えてく...
-
Tomcatのスレッドを破棄する方法
おすすめ情報