一般多线程
#!/bin/bash
function task {
echo "Starting task $1"
sleep $1
echo "Task $1 completed"
}
# 启动多个后台任务
task 1 &
task 2 &
task 3 &
# 等待所有后台任务完成
wait
echo "All tasks completed"
线程池的实现
#!/bin/bash
# 定义任务函数
function task {
local id=$1
local duration=$2
echo "Task $id started, will run for $duration seconds"
sleep $duration
echo "Task $id completed"
}
# 任务队列(这里定义任务的id和运行时长)
tasks=(
"1 5"
"2 3"
"3 2"
"4 7"
"5 1"
)
# 定义线程池大小
THREADS=3
# 创建一个函数来管理线程池
function run_pool {
local -n tasks=$1
local threads=$2
local current_jobs=0
# 循环处理任务
for task_info in "${tasks[@]}"; do
# 检查当前正在运行的任务数量
while (( current_jobs >= threads )); do
# 等待某个任务完成
wait -n
(( current_jobs-- ))
done
# 启动新任务
{
task $task_info
} &
(( current_jobs++ ))
done
# 等待所有任务完成
wait
}
# 调用线程池管理函数
run_pool tasks $THREADS
echo "All tasks completed"