shell高階 shell多執行緒

2022-07-03 20:06:12 字數 1673 閱讀 9622

1. 多執行緒併發執行任務,而不用一台臺的序列執行,能更快更高效

2. shell並沒有多執行緒的概念,所以:

* 一般使用wait、read等命令技巧性地模擬多執行緒實

* 使用命名管道(fifo)來實現多執行緒的控制

3. 用途:需要對多主機批量執行檢查或操作時(例如ssh、ping等操作)

tmp_fifofile="

/tmp/$$.fifo

"mkfifo

$tmp_fifofile #新建fifo型別的檔案

exec

5<>$tmp_fifofile #將fd 5指向fifo型別

rm$tmp_fifofile #可刪除

#這裡的$$.fifo

/5都是乙個檔名而已,可隨意

thread=5

# $thread 定義的是執行緒數,thread=5的意思是每次最多同時執行5個執行緒

#寫乙個for迴圈隨便echo個字元在5這個檔案中,實際上我們就是通過對這個字元的數量控制來實現對執行緒數量的控制的

for ((i=0;i<$thread;i++))

doecho

done >&5

# read -u 命令的意義是:read input from file descriptor fd. 讀取來自檔案描述符fd的輸入

# 實際上我們是通過「read -u 5

」來實現每次從5中減去乙個字元,

job_num=20

# $job_num定義了總的任務數

for ((i=0;i<$job_num;i++))

doread -u5 &

done

wait

#等待所有子程序結束

exec

5>&- #關閉fd 5

exit

0#成功退出

我們的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 world

real 0m12.064s

user 0m0.020s

sys 0m0.042s

使用shell指令碼(bash指令碼)模擬多執行緒

shell多執行緒指令碼

阮一峰-程序執行緒的簡單解釋

shell 多執行緒示例

shell指令碼本身不支援多執行緒語法,這裡所說的多執行緒本質上是使部分 在後台執行 多程序 使cpu自動的呼叫各個程序,最大限度的利用cpu的效能。這裡所說的能使用多執行緒的場景值得是部分 塊可以並行執行,相互之間沒有影響的情況。bin bash echo begin for num in seq...

多執行緒執行shell指令碼

分享乙個在linux下模擬多執行緒的併發指令碼,使用這個指令碼可以同時批量在定義數量的伺服器上執行相關命令,比起普通for while迴圈只能順序一條一條執行的效率高非常多,在管理大批伺服器時非常的實用。以下指令碼功能是通過scp 也可選rsync 向上千台伺服器傳更新包,指令碼執行後同時在後台有5...

多執行緒寫檔案 Shell簡單實現多執行緒

解決shell指令碼單執行緒下效率低下的問題 需要在linux系統執行同一項命令,但是針對不同的物件,例如ping檢測主機,當然可以延展,只要是命令之間不會產生衝突就可以了 正式開始前先了解一下下面使用到的乙個工具 nc nc是netcat的簡寫,有著網路界的瑞士軍刀美譽。因為它短小精悍 功能實用,...