bash shell實現併發多程序操作
前言目前我掌握的基本語言,php(最為熟悉,專案裡**都是用其實現),bash shell(運維利器),c(acm專用),這裡面能實現多執行緒的貌似只有c,但是我c只是用來學習和實現演算法和資料結構,因此工作中我想要模擬多程序併發操作,就只能依靠bash shell指令碼了
技能點shell指令碼裡實現併發操作,需要用到
for迴圈
&後台執行符
wait等待所有子程序結束
思路我們可以通過寫乙個for迴圈,控制每次需要批量操作的次數,
然後封裝乙個方法,方法裡進行批量操作,並將此方法用&符號放在後台執行
每個迴圈結束前用wait函式,確保當前批量處理操作全部完成
示例我們準備批量的執行建立目錄操作,目錄名稱為數字,從1開始到100,每次批量建立20個
無併發時
**如下:
[html]
#!/bin/bash
#開始時間
begin=$(date +%s)
#測試根目錄
root_dir="/home/wzy/wzy_scripts/file_scripts/test"
if [ ! -d $root_dir ]; then
mkdir -p $root_dir
fi cd $root_dir
#迴圈建立10000個目錄
for ((i=0; i<10000; ))
do mkdir $i
i=$(expr $i + 1)
done
#結束時間
end=$(date +%s)
spend=$(expr $end - $begin)
echo "花費時間為$spend秒"
執行時間:
併發操作
我們每次併發建立200個目錄,因此迴圈執行50次即可實現建立10000個目錄的工作
**如下:
[html]
#!/bin/bash
#開始時間
begin=$(date +%s)
#測試根目錄
root_dir="/home/wzy/wzy_scripts/file_scripts/test"
if [ ! -d $root_dir ]; then
mkdir -p $root_dir
fi cd $root_dir
#批量建立目錄函式
function create_dir()
#迴圈建立10000個目錄
count=10000
rsnum=200
cishu=$(expr $count / $rsnum)
for ((i=0; i
do start_num=$(expr $i \* $rsnum + $i)
end_num=$(expr $start_num + $rsnum)
for j in `seq $start_num $end_num`
do create_dir $j &
done
wait
i=$(expr $i + 1)
done
#結束時間
end=$(date +%s)
spend=$(expr $end - $begin)
echo "花費時間為$spend秒"
主要是分頁處理和&以及wait的使用
執行時間:
併發伺服器 多程序實現
通過簡單的socket可以實現一對一的c s通訊,當多個客戶端同時進行伺服器訪問,那麼伺服器只能按序的一一進行處理,除了第乙個客戶端,其餘客戶端都會陷入等待。並且這樣的程式只能實現半雙工通訊 資料能雙向傳輸,但同一時刻只能單向傳遞,通過切換傳輸方向實現雙工 而且實現方式繁瑣,功能拘束,實用價值很低。...
python 多程序 協程 實現併發
使用程序池創 pool 建程序,用佇列 queue 進行程序間通訊。在子程序裡邊用協程去處理。直接上 from datetime import datetime from multiprocessing import pool,manager import asyncio from random i...
摘錄 多程序併發
現在是多核時代,併發才能實現更高的吞吐量 更快的響應,但也是把雙刃劍。總結如下幾個用法 這是兩種最常見的多執行緒併發,它們有個天生的缺陷 scalability。乙個機器的效能總是有瓶頸的。兩個場景的邏輯雖然由多個執行緒實現了併發,但是運算量十分有可能是一台機器無法承載的。如果是多程序併發,那麼可以...