フォークとスレッディング
質問
私は以前、私のアプリケーションでスレッドを使用し、その概念をよく知っています。これはスレッディングに似ているものです。
私は両者の違いをグーグル検索し、それを知ることになりました。
- フォークは、古いプロセスまたは親プロセスとまったく同じに見える新しいプロセスにすぎませんが、それでも異なるプロセス ID とそれ自身のメモリを持っている別のプロセスです。
- スレッドは、より少ないオーバーヘッドを持つ軽量なプロセスです。
しかし、私の頭の中にはまだいくつかの疑問が残っています。
- いつスレッドよりもfork()を優先すべきなのか、またその逆は?
- 外部アプリケーションを子として呼び出したい場合、fork()とスレッドのどちらを使用すべきでしょうか?
- Google検索をしているとき、私は人々がスレッド内でfork()を呼び出すことは悪いことだと言っていることを見つけました。
- 親プロセスと子プロセスが同時に実行されないので、fork() はマルチプロセッサシステムを利用できないというのは本当ですか?
どのように解決するのですか?
フォークとスレッドのアプローチの主な違いは、オペレーティング システムのアーキテクチャの 1 つです。Unix が設計された当時、フォーク処理はメインフレームやサーバー タイプの要件に最もよく応える簡単で単純なシステムであり、そのため Unix システムで普及しました。MicrosoftがNTカーネルをゼロから再設計した際、よりスレッドモデルに焦点を当てました。そのため、今日でも、Unixシステムはフォークで効率的に、Windowsはスレッドでより効率的に、という顕著な違いがあります。最も顕著に見られるのは、Unix で prefork 戦略を使用する Apache と、Windows でスレッドプールを使用する Apache でしょう。
あなたの質問に具体的に答えます。
どのような場合にスレッドよりもfork()を優先すべきでしょうか、またその逆も同様でしょうか?
Unixシステムで、Workerのインスタンス化よりもはるかに複雑なタスクを行っている場合、または、個別のプロセスの暗黙のセキュリティサンドボックス化が必要な場合です。
<ブロッククオート子プロセスとして外部アプリケーションを呼び出したい場合、fork()やスレッドを使用すべきでしょうか?
もし子プロセスが親プロセスと同じタスクを同じコードで実行するのであれば、forkを使用します。より小さなサブタスクにはスレッドを使用します。個別の外部プロセスにはどちらも使用せず、適切なAPIコールで呼び出すだけです。
Google検索をしていると、スレッド内でfork()を呼び出すことは悪いことだと言っている人たちを見つけました。
完全にはわかりませんが、プロセスや多くのサブスレッドを複製するのは計算上かなり高くつくと思います。
<ブロッククオート親プロセスと子プロセスが同時に実行されないので、fork()はマルチプロセッサシステムを利用できないって本当ですか?
forkは新しいプロセスを作成し、OSのタスクスケジューラでプロセスに利用可能なすべての機能を利用します。
関連
-
deepin20のファイルを共有する方法を教えてください。Windowsでdeepinファイルを共有するためのヒント
-
Linuxでファイルパーミッションを与えるには?Linuxでファイルに実行可能なパーミッションを追加するためのヒント
-
Deepin20システムのフォントを設定するには?Deepin端末のフォントサイズを設定する方法
-
[解決済み】クロススレッド操作が有効でない。作成されたスレッド以外のスレッドからアクセスされたコントロール
-
ubuntu 12.04 eclipse でプログラム g++ がパスに見つからなかったと報告される。
-
sudo が sudo として表示される: setuid root である必要がある
-
[解決済み] C++11では、標準化されたメモリモデルが導入されました。その意味するところは?そして、C++プログラミングにどのような影響を与えるのでしょうか?
-
[解決済み] フォルダとそのサブフォルダ/ファイルのパーミッションを一括で変更する方法
-
[解決済み】「スレッド」とは(本当は)何ですか?)
-
[解決済み】fork()、vfork()、exec()、clone()の違いについて)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Vmware 16仮想マシンを開けない場合、ファイルをローカルにコピーする方法は?
-
Linuxのデスクトップの背景を画像で引き伸ばし表示にする方法とは?
-
Centos7のインストールと展開無料のconfluence wikiの(知識ベース)詳細な操作手順
-
Linux Mintシステムでプログラムをアンインストールするには? Linux で不要なアプリケーションをアンインストールするためのヒント
-
Linux Mintで入力メソッドを削除する方法は?Linux Mintで冗長な入力メソッドを削除するためのヒント
-
deepin20のデフォルトブラウザを設定するには?deepinにデフォルトブラウザを追加するためのヒント
-
GCCのバージョンによる浮動小数点演算の例外発生
-
floor'への未定義の参照/`&'への未定義の参照
-
[解決済み] bash sh - command not found [重複].
-
[解決済み] Linux で grep を使ってファイル名だけを表示するにはどうしたらいいですか?