質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

1回答

3586閲覧

マルチスレッドとマルチプロセスの違いを理解したい

退会済みユーザー

退会済みユーザー

総合スコア0

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2022/07/29 04:35

編集2022/07/29 05:40

提示のサイトですがマルチプロセスとマルチスレッドについての説明がありますが。二つの違いは

マルチスレッド: 一つのプロセスインスタンスの中で、タイムスライスを使用して複数の処理を並列実行する仕組みである。
マルチプロセス: 一つのCPUでタイムスライスをする。

知りたいこと

1,上記の理解で正しいのでしょうか?
2,上記の説明ですがCPUとはCPUコアという意味でしょうか?
3、どう使い分ければいいのでしょうか?

参考サイト: https://www.wake-mob.jp/2019/10/it.html

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2022/07/29 05:14

> 1,上記の理解で正しいのでしょうか? いいえ。参考にするサイトから見直し、ターゲットとなる OS の公式情報を見るのが良いでしょう。
m.ts10806

2022/07/29 05:31

整理したい?理解したいではなく?
退会済みユーザー

退会済みユーザー

2022/07/29 05:41

> OS の公式情報を見るのが良いでしょう。 ですがOSによりどんなところが違うのでしょうか?
m.ts10806

2022/07/29 05:54

OSの違いが大事ではなく「個人記事ではなく公式を見ろ」と言われてるだけだと思うのですが。 「たぶん他のバージョンでも大丈夫」という素人判断を排除するために「ターゲットとなるOS」という前提がついてるだけで、あくまで公式を見なさいということですよ。 いつも、見てないし、見てたとしても言葉尻だけで理解できてるようには思えないですが。
hentaiman

2022/07/29 11:09

参考サイト見ましたが、そのサイトは参考にしない方が良さそうですね
guest

回答1

0

ベストアンサー

いったんタイムスライスのことは忘れましょう。

まず「並行処理」という言葉があります。これは、複数のプログラムが同時に起動状態にあり、通常の文脈では、互いに協調して動作することです。CPUが一つしかない場合、複数のプログラムをどうやって同時に動かすのかという問題がありますが、それを実現する手法の一つがタイムスライスです。

一般的な文脈では、「プロセス」は独立したメモリ空間をもったプログラムであり、特別なことをしない限り、他のプロセスのメモリにアクセスすることはできません。メモリ保護の貧弱なOSであれば、バグ等や攻撃などで他のプロセスのメモリにアクセスすることは有りえますが、現在ではほぼそういうことはないと思います。

一方、スレッドはメモリ空間を共有します。簡単にいうと、グローバル変数はどのスレッドからも容易にアクセスできる共有資源になります。一方、通常、ローカル変数は各スレッドで独立していて、互いに干渉することはありません。ただし、メモリ空間が共通なので、バグや脆弱性などでローカル変数が互いに干渉することは現在でも有りえます。

CPU(CPUコアと考えて良い)が単一の場合、同時に動くスレッドないしプロセスは一つだけですが、マルチCPU(マルチコアも含む)の場合、同時に複数のスレッドないしプロセスが動作できます。複数CPUを同時に動かすことを積極的に行うのが並列処理です。たとえば、WindowsやMacで動画を複数同時に表示しているようなケースでは、プログラムが同時に動いていますが、こういうのは普通並列処理とは言いません。並列処理と呼ぶのは、複数のCPUが協調して動くことにより、単一CPUよりも高性能になることを意図しています。

このような前提で質問への回答ですが、

マルチスレッド: 一つのプロセスインスタンスの中で、タイムスライスを使用して複数の処理を並列実行する仕組みである。

CPUの数やタイムスライスの有無は関係なく、一つのプロセスインスタンスの中で複数の処理が並行して動作する仕組みです。

マルチプロセス: 一つのCPUでタイムスライスをする。

CPUの数やタイムスライスの有無は関係なく、複数のプログラムが(見かけ上)同時に動くことです。

投稿2022/07/29 12:16

ockeghem

総合スコア11701

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2022/07/30 04:03

質問ですが 1,"見かけ上同時に動くこと"と"複数の処理が同時に並行して動作する仕組み"をプログラム上でどう使い分ければいいのでしょうか? 2,自分は画像ファイルや音声ファイルのエンコードをマルチプロセスやマルチスレッドで行いたいのですがその場合どのやり方が高速なのでしょうか? 3,マルチスレッド、マルチプロセスは数を多くするとかえって遅くなると聞いたのですがそれについて詳細が知りたいです。
ockeghem

2022/07/30 04:17

> 1,"見かけ上同時に動くこと"と"複数の処理が同時に並行して動作する仕組み"をプログラム上でどう使い分ければいいのでしょうか? "見かけ上同時に動くこと" についてはプログラム上は特に意識することはありません。WordとExeclを同時に開いただけでも、"見かけ上同時に動くこと"に該当します。 "複数の処理が同時に並行して動作する仕組み"はプログラミング上で意識する必要があります。今日では多くの場合マルチスレッドの処理を用います。マルチスレッド対応の言語を選んで、その言語機能について学ぶとよいと思います。 > 2,自分は画像ファイルや音声ファイルのエンコードをマルチプロセスやマルチスレッドで行いたいのですがその場合どのやり方が高速なのでしょうか? 前述のようにマルチスレッドの方が簡便で、多くの場合は高速です。 > 3,マルチスレッド、マルチプロセスは数を多くするとかえって遅くなると聞いたのですがそれについて詳細が知りたいです。 CPUコア数よりもスレッド数が多くなると、結局「待ち」が発生することと、共有資源(ファイルやグローバル変数等)の取り合いが発生して、資源が取れなかったスレッドは待ちが生じます。 このあたりは並行処理の奥深い話題なので、別途平行プログラミングの教科書等で勉強してください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問