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