first commit
This commit is contained in:
38
shell有名管道实现进程池.sh
Normal file
38
shell有名管道实现进程池.sh
Normal file
@@ -0,0 +1,38 @@
|
||||
#!/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
|
||||
let "ts=$1%4"
|
||||
sleep $ts
|
||||
}
|
||||
|
||||
# 测试开始
|
||||
for task in $(seq 11 88); do # 这里的多任务用几个整数模拟
|
||||
read -n1 -u1022 # 每次执行任务前读出一个字符
|
||||
(
|
||||
ExecTask $task
|
||||
echo -n '.'
|
||||
echo >&1022 # 每次执行任务后再写入一个字符
|
||||
) & # 后台启动任务
|
||||
done
|
||||
wait
|
||||
echo
|
||||
# 测试结束
|
||||
|
||||
Reference in New Issue
Block a user