シェルスクリプトのマルチスレッド実装

マルチスレッドシェルスクリプト
シェルスクリプトを使用するには、その効率を改善するために、複数のスレッドを使用することを検討して、順序の遅すぎる実装を走りました。
これは、&​​+マルチスレッド達成待つ使用して行われ、次の比較を参照してください。

  1. 実行順序の
    実行が3倍時間がないが、12秒の総消費し、4秒を待つ
    コード:
    #/ binに/ bashのは
    DATE
    でNUMのためseq 1 3
    のDOを
    {
    エコー"SLEEP 4"
    SLEEP 4
    }
    DONE
    DATEの
    結果:
    2019年11月20日水曜日09: CST 40:56
    SLEEP 4
    SLEEP 4
    SLEEP 4
    2019インディアン11 9月20日(水曜日)午前九時41分08秒CST

  2. 使用・+待って
    並列実行は、4秒の総取り
    コード:
    #/ binに/ bashのは
    DATEを
    NUMにするためにseq 1 3
    行う
    {
    エコー"SLEEP 4。"
    SLEEP 4。
    }&
    DONE
    待機
    DATEの
    結果:
    2019年11月20日水曜日、午前9時42分: CST 44
    SLEEP 4
    SLEEP 4
    SLEEP 4
    2019インディアン11 9月20日(水曜日)午前9時42分48秒CST

観察によると、見つけることができます&+ウェイトサイクルは、多数のトランザクションを扱う問題がある場合、次の方法にスレッドの数、各オープン係る制御を実現することが可能であるように、背景にコマンドすべてのボディを形成することになります

  1. 以下のための多層ループ
    12秒、合計9回の合計、3つのスレッドを送信、4秒の待機は、かかる
    コード:
    #/ binに/ bashのを
    DATE
    からnum2のためにあるseq 1 3

    {
    NUMにするためにseq 1 3
    行う
    {
    エコー「SLEEPを4。」
    SLEEP 4。
    }&
    DONE
    待機
    }
    DONE
    DATEの
    結果:
    2019年11月20日CST水曜日午前9時47分23秒
    SLEEP 4
    SLEEP 4
    SLEEP 4
    SLEEP 4
    SLEEP 4
    SLEEP 4
    SLEEP 4
    SLEEP 4
    SLEEP 4
    2019年11月20日午前九時47分35秒CST水曜日

  2. xargsの-Pの同時使用
    9回の合計は、3つのスレッドが4秒間、送信待ち、12秒を合計すると、取り
    :コード
    #/ binに/ bashのを

all_num = 9
thread_num = 3

日付

配列1つの$ {} all_num | xargsの-n 1 -I {} -P $ {thread_num} SH -C "スリープ4;エコー{}"

日付
結果:
2019年11月20日水曜日午前9時51分03秒CST
1
3
2
4
5
6
8
9
7
2019年11月20日午前9時51分15秒CST水曜日

これらは、シェルが私の概要を平行になっています。そこGNU並列命令同時実行の方法を使用して、テスト環境は、順序を変更しないので、それはテストをしなかった、完了環境の後にテストされます。

おすすめ

転載: blog.51cto.com/12120912/2451750