shell多线程
控制并发数
使用xargs -P
控制并发数
xargs命令有一个-P
参数,表示支持的最大进程数,默认为1。为0时表示尽可能地大,即方案2
的效果。
#/bin/bash
all_num=10
thread_num=5
a=$(date +%H%M%S)
seq 1 ${all_num} | xargs -n 1 -I {} -P ${thread_num} sh -c "sleep 1;echo {}"
b=$(date +%H%M%S)
echo -e "startTime:\t$a"
echo -e "endTime:\t$b"
使用GNU parallel
命令控制并发数
GNU parallel
命令是非常强大的并行计算命令,使用-j
参数控制其并发数量。
#/bin/bash
all_num=10
thread_num=6
a=$(date +%H%M%S)
parallel -j 5 "sleep 1;echo {}" ::: `seq 1 10`
b=$(date +%H%M%S)
echo -e "startTime:\t$a"
echo -e "endTime:\t$b"