[shell进阶]——shell多线程
生活随笔
收集整理的這篇文章主要介紹了
[shell进阶]——shell多线程
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
關于shell的多線程
1. 多線程并發執行任務,而不用一臺臺的串行執行,能更快更高效
2. Shell并沒有多線程的概念,所以:
? ? * 一般使用wait、read等命令技巧性地模擬多線程實
? ? * 使用命名管道(fifo)來實現多線程的控制
3. 用途:需要對多主機批量執行檢查或操作時(例如ssh、ping等操作)
?
分段解析一個例子來理解一個多線程腳本的書寫
1. 新建fifo類型文件
tmp_fifofile="/tmp/$$.fifo" mkfifo $tmp_fifofile #新建fifo類型的文件 exec 5<>$tmp_fifofile #將fd 5指向fifo類型 rm $tmp_fifofile #可刪除 #這里的$$.fifo/5都是一個文件名而已,可隨意2. 定義線程數,循環鍵入字符,通過字符控制實現線程數量控制
thread=5 # $thread 定義的是線程數,thread=5的意思是每次最多同時執行5個線程 #寫一個for循環隨便echo個字符在5這個文件中,實際上我們就是通過對這個字符的數量控制來實現對線程數量的控制的 for ((i=0;i<$thread;i++)) do echo done >&53. 執行任務
# read -u <fd>命令的意義是:read input from file descriptor fd. 讀取來自文件描述符fd的輸入 # 實際上我們是通過“read -u 5”來實現每次從5中減去一個字符,job_num=20 # $job_num定義了總的任務數 for ((i=0;i<$job_num;i++)) do read -u5{sleep 3 && echo "Hello World" || echo "Hello error"...... ===>這些部分就是我們要執行的命令,可封裝成函數......echo >&5 #多加回一個字符 }& done4. 等待、關閉、退出
wait #等待所有子進程結束 exec 5>&- #關閉fd 5 exit 0 #成功退出5. 執行結果
我們的job_num有20個,thread定義了5個 即每5個每5個這樣執行 一共需要執行4次(單線程就要執行20次了) 每次執行是3s,所以共花費3*4=12s# time sh dxc.sh Hello World Hello World Hello World Hello World Hello World Hello World Hello World Hello World Hello World Hello World Hello World Hello World Hello World Hello World Hello World Hello World Hello World Hello World Hello World Hello Worldreal 0m12.064s user 0m0.020s sys 0m0.042s?
參考文章
使用shell腳本(bash腳本)模擬多線程
Shell多線程腳本
阮一峰-進程線程的簡單解釋
轉載于:https://www.cnblogs.com/snsdzjlz320/p/7238998.html
總結
以上是生活随笔為你收集整理的[shell进阶]——shell多线程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【POJ2387】Til the Cow
- 下一篇: 倒腾了一天的笔记-centos 部署ja