<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-314  評論-209  文章-0  trackbacks-0

    Shell中并沒有真正意義的多線程,要實現(xiàn)多線程可以啟動多個后端進程,最大程度利用cpu性能。

    直接看代碼示例吧。

    (1) 順序執(zhí)行的代碼

    復制代碼
     1 #!/bin/bash  2 date  3 for i in `seq 1 5`  4 do  5 {  6     echo "sleep 5"  7     sleep 5  8 }  9 done 10 date 
    復制代碼

    輸出:

    復制代碼
    Sat Nov 19 09:21:51 CST 2016 sleep 5 sleep 5 sleep 5 sleep 5 sleep 5 Sat Nov 19 09:22:16 CST 2016
    復制代碼

    (2) 并行代碼

    使用'&'+wait 實現(xiàn)“多進程”實現(xiàn)

    復制代碼
     1 #!/bin/bash  2 date  3 for i in `seq 1 5`  4 do  5 {  6     echo "sleep 5"  7     sleep 5  8 } &  9 done 10 wait  ##等待所有子后臺進程結(jié)束 11 date
    復制代碼

    輸出:

    復制代碼
    Sat Nov 19 09:25:07 CST 2016 sleep 5 sleep 5 sleep 5 sleep 5 sleep 5 Sat Nov 19 09:25:12 CST 2016
    復制代碼

     (3) 對于大量處理任務如何實現(xiàn)啟動后臺進程的數(shù)量可控?

      簡單的方法可以使用2層for/while循環(huán)實現(xiàn),每次wait內(nèi)層循環(huán)的多個后臺程序執(zhí)行完成

      但是這種方式的問題是,如果內(nèi)層循環(huán)有“慢節(jié)點”可能導致整個任務的執(zhí)行執(zhí)行時間長。

      更高級的實現(xiàn)可以看(4)

    (4) 使用命名管道(fifo)實現(xiàn)每次啟動后臺進程數(shù)量可控。 

    復制代碼
     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  # 最大可同時執(zhí)行線程數(shù)量 16 job_num=100   # 任務總數(shù) 17  18 #根據(jù)線程總數(shù)量設置令牌個數(shù) 19 for ((i=0;i<${thread_num};i++));do 20     echo 21 done >&6  22  23 for ((i=0;i<${job_num};i++));do # 任務數(shù)量 24     # 一個read -u6命令執(zhí)行一次,就從fd6中減去一個回車符,然后向下執(zhí)行, 25     # fd6中沒有回車符的時候,就停在這了,從而實現(xiàn)了線程數(shù)量控制 26     read -u6  27  28     #可以把具體的需要執(zhí)行的命令封裝成一個函數(shù) 29     {    30         my_cmd 31     } & 32  33     echo >&6 # 當進程結(jié)束以后,再向fd6中加上一個回車符,即補上了read -u6減去的那個 34 done 35  36 wait 37 exec 6>&- # 關(guān)閉fd6 38 echo "over"
    復制代碼

     

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

    posted on 2017-08-02 17:01 xzc 閱讀(356) 評論(0)  編輯  收藏 所屬分類: linux/unix
    主站蜘蛛池模板: 日韩a级无码免费视频| 色www永久免费视频| 亚洲第一区二区快射影院| 国产成人免费一区二区三区| 久久久WWW成人免费精品| 亚洲最新中文字幕| 亚洲国产精品无码久久青草| 无码av免费一区二区三区试看| 涩涩色中文综合亚洲| 亚洲精品乱码久久久久久| 在线观看av永久免费| 久久久久免费视频| 亚洲精品亚洲人成在线| 亚洲av无码不卡一区二区三区| 成人免费视频国产| 67pao强力打造国产免费| 曰批全过程免费视频观看免费软件| 亚洲bt加勒比一区二区| 亚洲不卡AV影片在线播放| 亚洲黄色片免费看| 一级做α爱过程免费视频| 亚洲资源最新版在线观看| 久久精品国产亚洲麻豆| 日本视频免费在线| 18国产精品白浆在线观看免费| 丰满妇女做a级毛片免费观看 | 国产成人亚洲综合网站不卡| 亚洲欧洲无码AV电影在线观看 | 两个人日本免费完整版在线观看1| 色婷五月综激情亚洲综合| 久久久久久a亚洲欧洲aⅴ| 国产伦一区二区三区免费| 国产免费不卡视频| 麻豆精品不卡国产免费看| 鲁啊鲁在线视频免费播放| 国产精品亚洲综合五月天| 亚洲精品免费在线观看| 亚洲综合AV在线在线播放 | 亚洲春色另类小说| 亚洲av无码一区二区三区不卡| 亚洲第一区在线观看|