bashで並列処理する方法(xargs)

並列処理とは

通常、意識せずにプログラムを書くと、大体の場合はシングルプロセスの動作をするプログラムになります。

シングルプロセスとは、処理が書かれた順番に実行されていくということです。

シングルプロセスとは別に、マルチプロセスという動作があります。

マルチプロセスとは、イメージてきには、作業レーンが複数ある状態をイメージするのがわかりやすくて、さらにその作業レーンの中でシングルプロセスのプログラムが動く状態です。

現在、コンピュータのプロセッサ(CPU)は、通常マルチコアになっていて、マルチプロセスが動く前提の構造になっています。例えば、ブラウザを開きながら、メモ帳を起動したりなどです。

最近のCPUは1コアあたりの性能よりも、コア数を増やしてトータルで性能を上げる方向性がつよいので、プログラムを高速化しようとすると、大体の場合、シングルプロセスでは行き詰まりが発生してきて、マルチプロセスをどう使ったら早くなるかとかを考えるフェーズがかなりのケースで発生します。

似ている単語でマルチスレッドというものもあるのですが、bashでマルチスレッドをやるのは難しいので、この記事では割愛します。

xargsでマルチプロセスをやる方法

前置きが長くなりましたが、xargsを使うとマルチプロセスをわりと簡単に実装することができるので、簡単な例を使って解説しようとおもいます。

前提として、xargsはいろいろなオプションがあって、シェルスクリプトあるあるですが、使い方も人によってちがうので、他のやり方を否定するものではないです。あくまで例としてみてください。

シングルプロセスの例

処理結果

コードの解説

functionで3秒ごとにechoする機能を定義しています。

引数で何番目に呼ばれたかをわかるようにしていますが、シンプルな機能実装です。

export -f してますが、これはxargsをつかうと別プロセスで実行することになるので、exportしてあげないと別プロセスからfunctionが見えない状態になるためです。

seq 1 3で、1 2 3の連番をつくりだし、それをxargsに食わせています。

-Lは、1回の実行で使う引数の数です。ほとんどの場合、1を指定しておけば大丈夫です。

-Pは、並列プロセス数です。マルチプロセスをする場合は、2以上にします。

-Iは、パイプで受け取った引数の代名詞を定義します。大体、{}って書いておけばOKです。

今回は、-P 1なので、シングルプロセスの処理となり、処理結果の状態が生まれます。

マルチプロセスの場合

マルチプロセスを行う場合、-Pを2以上にします。

例えば、-P 2とすると以下の結果となります。

1処理目と2処理目が同時に走り、そのあとに3処理目が走っているのがわかります。

2並列の処理結果

スポンサードリンク

関連記事

no image

[bash] cronでログインシェル(.bash_profile)の環境変数などを読み込ませる

こんにちは、今回もメモ。 cronでシェルを実行する際、普通にコマンドを書くと、ログインシェル

記事を読む

no image

[bash] bash入門2 - viの使い方・代表的なコマンド一覧

こんにちは、今回はbash入門2としてviエディタの使い方を説明します。 bashの事始めはこ

記事を読む

no image

[bash] if文の書き方

if文の書き方をメモります。 ●構文 ※カッコ([])と条件式の間のスペースが無いとエラーに

記事を読む

no image

[cron] dateコマンドをcronに書くときの注意点

dateコマンドの引数をcronにそのまま書くと怒られることへのメモ。 そのまま、

記事を読む

no image

awkでのgsubを使った文字列置換(正規表現)

まえおき bashなどのシェルスクリプトで、lsした結果とかをつかってファイルを集計したいと

記事を読む

no image

[bash] ファイルの中身を1行ずつ処理するループ処理(while文)

ファイルの中身を1行ずつ処理したい場合の処理です。 ファイル名を引数にとります。 #

記事を読む

no image

[bash] expr - bashで数値計算を行う方法

bashで数値計算を行う方法です。 exprコマンド自体をで囲んで、変数に代入してあげます。

記事を読む

no image

[bash] 文字列長を調べる

bashで変数に入っている文字列長を調べるときは以下のようにする。 ${#変数名} ●実

記事を読む

no image

[bash] 文字列の分割(split処理)

bashで文字列をsplitする方法を紹介します。 例えば、以下の文字列をカンマ区切りでspl

記事を読む

no image

[bash] grep・egrepコマンド

基本パターン ファイル中の文字列を検索 $ grep '[検索したい文字列]' 検索対象ファ

記事を読む

スポンサードリンク

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

スポンサードリンク

no image
CentOSにdockerをインストールしてみた

前置き dockerをcentos7にインストールしてみました

no image
awkでのgsubを使った文字列置換(正規表現)

まえおき bashなどのシェルスクリプトで、lsした結果とかを

no image
bashで並列処理する方法(xargs)

並列処理とは 通常、意識せずにプログラムを書くと、大体の場合は

no image
AWS Redshiftの使用ストレージ容量をクエリで調べる方法

用途 AWS Redshfitのコンソールを見れば、使用中のス

no image
pythonでstorage transfer serviceを使ってみた。

準備 pythonのインストールとかする。 このあたり。

→もっと見る

  • 2024年11月
     123
    45678910
    11121314151617
    18192021222324
    252627282930  
  • 2024年11月
     123
    45678910
    11121314151617
    18192021222324
    252627282930  
PAGE TOP ↑