どのように動作しますか?

どのように動作しますか?

私はbashシェルの並行性と並列性について少し混乱しています。私が理解したように、同時に複数のサブシェルでコマンドを実行すると、そのコマンドはさまざまなプロセッサコアで並列に実行されます。

例えば。

cmd1 & cmd2 & cmd3 & 

ここで、「&」記号は各コマンドのバックグラウンド(サブシェルとも呼ばれる)で同時に実行されます。別の方法でサブシェルで作成できます。 (かっこ内に書いたりパイプを使用したりするのと同じです。)

この方向から、私はこれらの質問に対する答えを知りたいです。

  • Bashはサブシェルを介して並列性を提供します。一方、Bashでも並行性を達成する他の方法はありますか?私が知っている限り、並行性は単一のCPUが断続的にタスクを実行することによって機能します。これを達成するには、外部でメソッドを実装する必要がありますか?あるいは、bashはすでにこのように動作します(並行性)。
  • 並列処理を使用してすべてのCPUコアを占有すると、システムがクラッシュしますか?それともこの状況に対する保護メカニズムはありますか?
  • 私が使用するパラレルツールとサブシェルが提供するGNUパラレルツールの違いは何ですか? GNU Parallelツールがうまく機能している場合、どうすればこれを達成できますか?
  • 「並列」または「同時」のどちらがより効率的ですか?
  • 通常のタスク(コマンドを順次実行)とは異なり、「並列」または「同時」タスクを実行するとどのような不利益が発生しますか?

ベストアンサー1

どのように動作しますか?

「並行性は、単一のCPUが断続的にタスクを実行するように動作します」と言います。http://ncce.io/wall-building

並行性は単一のプロセッサで実行できるため、多くのコアが必要なく、すべて使用しているかどうかは重要ではありません。

利用可能なコアがある場合、コアよりもプロセスが多くなるまで上記の技術は使用されません。

管理手数料があります:

  • 作成プロセス:MS-Windowsよりはるかに高速ですが、まだオーバーヘッドがあります。
  • プロセス間通信。
  • 同時実行:多くのプロセスが同時に実行されているように見えます(他のプロセスを実行するように切り替えるには少し労力が必要です)。

バッシュは何をしますか?

Bashは新しいプロセスを作成し、オペレーティングシステムのカーネルが残りのタスクを実行します。プロセス(すべてのプロセス)が新しいプロセスを作成すると、カーネルはそれを同じ方法で処理します。これはPythonでこれを行う方法の例です。https://ctrlaltdelor.wordpress.com/2019/06/01/creation-of-an-interprocess-pipe-in​​​-python-the-unix-gnu-linux-way/

おすすめ記事