linux shell 多線程執行程式

來源:互聯網
上載者:User

標籤:div   tmp   建立   斷行符號   linu   bin   cpu   while迴圈   nbsp   

Shell中並沒有真正意義的多線程,要實現多線程可以啟動多個後端進程,最大程度利用cpu效能。

直接看程式碼範例吧。

(1) 順序執行的代碼

 1 #!/bin/bash 2 date 3 for i in `seq 1 5` 4 do 5 { 6     echo "sleep 5" 7     sleep 5 8 } 9 done10 date 

輸出:

Sat Nov 19 09:21:51 CST 2016sleep 5sleep 5sleep 5sleep 5sleep 5Sat Nov 19 09:22:16 CST 2016

(2) 並行代碼

使用‘&‘+wait 實現“多進程”實現

 1 #!/bin/bash 2 date 3 for i in `seq 1 5` 4 do 5 { 6     echo "sleep 5" 7     sleep 5 8 } & 9 done10 wait  ##等待所有子後台進程結束11 date

輸出:

Sat Nov 19 09:25:07 CST 2016sleep 5sleep 5sleep 5sleep 5sleep 5Sat Nov 19 09:25:12 CST 2016

 (3) 對於大量處理任務如何?啟動後台進程的數量可控?

  簡單的方法可以使用2層for/while迴圈實現,每次wait內層迴圈的多個背景程式執行完成

  但是這種方式的問題是,如果內層迴圈有“慢節點”可能導致整個任務的執行執行時間長。

  更進階的實現可以看(4)

(4) 使用具名管道(fifo)實現每次啟動後台進程數量可控。 

 1 #!/bin/bash 2  3 function my_cmd(){ 4     t=$RANDOM 5     t=$[t%15] 6     sleep $t 7     echo "sleep $t s" 8 } 9 10 tmp_fifofile="/tmp/$$.fifo" 11 mkfifo $tmp_fifofile      # 建立一個fifo類型的檔案12 exec 6<>$tmp_fifofile     # 將fd6指向fifo類型13 rm $tmp_fifofile    #刪也可以14 15 thread_num=5  # 最大可同時執行線程數量16 job_num=100   # 任務總數17 18 #根據線程總數量設定令牌個數19 for ((i=0;i<${thread_num};i++));do20     echo21 done >&6 22 23 for ((i=0;i<${job_num};i++));do # 任務數量24     # 一個read -u6命令執行一次,就從fd6中減去一個斷行符號符,然後向下執行,25     # fd6中沒有斷行符號符的時候,就停在這了,從而實現了線程數量控制26     read -u6 27 28     #可以把具體的需要執行的命令封裝成一個函數29     {   30         my_cmd31     } &32 33     echo >&6 # 當進程結束以後,再向fd6中加上一個斷行符號符,即補上了read -u6減去的那個34 done35 36 wait37 exec 6>&- # 關閉fd638 echo "over"

 

參考:http://lawrence-zxc.github.io/2012/06/16/shell-thread/

 

linux shell 多線程執行程式

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.