fragment/shell有名管道实现进程池.sh

38 lines
896 B
Bash

#!/bin/bash
#=========================================
# Filename : process_pool.sh
# Author : Colben
# Create : 2018-12-14 19:04
#=========================================
#set -euo pipefail
export LANG=en_US.UTF-8
#[ 0 = $UID ] || exit 1
# 创建有名管道,模拟 go 的有缓存 channal
rm -rf pool.pipe && mkfifo pool.pipe || exit 1
exec 1022<> pool.pipe && rm -f pool.pipe
# 初始向有名管道写入10个字符
printf "%10s" '' >&1022
# 功能: 执行一个任务
# 根据业务需求自己实现
function ExecTask {
local ts=$1
sleep $[ts%10]
}
# 测试开始
for task in $(seq 11 88); do # 这里的多任务用几个整数模拟
read -n1 -u1022 # 每次执行任务前读出一个字符
(
ExecTask $task
echo -n '.'
echo >&1022 # 每次执行任务后再写入一个字符
) & # 后台启动任务
done
wait
echo
# 测试结束