GNU/Linux >> Linux の 問題 >  >> Linux

サブシェルを使用するオーバーヘッドはどのくらいですか?

サブシェルにはオーバーヘッドがあります。

私のシステムでは、最小限の fork-exec コスト (ファイルがコールドでないときにディスクからプログラムを実行する場合) は約 2ms です。 最小限の分岐コストは約 1ms です .

サブシェルでは、ファイルを exec にする必要がないため、フォークのコストだけを話していることになります。 編。サブシェルが適度に低く保たれている場合、1ms 人間向けのプログラムではごくわずかです。人間は 50ms よりも速く発生するものに気付くことができないと思います (これは、最新のスクリプト言語インタープリターが開始するまでにかかる傾向がある時間です (私が話しているのは python です) rvm のルビー こちら) 最新の nodejs 100ms あたりを占める ).

ただし、ループが追加されるため、たとえば、かなり一般的な bactick または $() を置き換えたい場合があります。 return のパターン 親シェルが printf -v のようなバシズムでキャッチするために、関数から何かを標準出力に出力する (または高速な外部プログラムを使用してバッチ全体を処理します)。

bash-completion パッケージは、http://fvue.nl/wiki/Bash:_Passing_variables_by_reference

で説明されている手法を使用して、渡された変数名を介して返すことにより、このサブシェル コストを明確に回避します。

比較中

time for((i=0;i<10000;i++)); do echo "$(echo hello)"; done >/dev/null 

time for((i=0;i<10000;i++)); do echo hello; done >/dev/null 

システムの fork を適切に見積もることができます。 -ing オーバーヘッドは.


Linux
  1. シェルを使用してinitシステムを検出しますか?

  2. POSIX とはどういう意味ですか?

  3. >、&>、>&、および 2&> を使用して出力をリダイレクトすることの違いは何ですか?

  1. LinuxとUnix:違いは何ですか?

  2. / パーティションのすべてのスペースを使い果たしているものを見つけるにはどうすればよいですか?

  3. ゴールドリンカーとは何ですか?

  1. ローリングリリースLinuxとは何ですか?それを使用することの本当の利点は何ですか

  2. 私が使用しているDnsサーバーは何ですか?

  3. UUIDを使用することの本当の利点は?