#!/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=$[RANDOM%10] sleep $ts } # 测试开始 for task in $(seq 11 88); do # 这里的多任务用几个整数模拟 read -n1 -u1022 # 每次执行任务前读出一个字符 ( ExecTask $task echo -n '.' echo >&1022 # 每次执行任务后再写入一个字符 ) & # 后台启动任务 done wait echo # 测试结束