http://bbs.51cto.com/thread-1104907-1-1.html
http://www.51testing.com/html/28/116228-238978.html
http://cooder.sinaapp.com/?p=81106
#! /usr/bin/env bash
trap "exec 1000>&-;exec 1000<&-;exit 0" 2
mkfifo testfifo
exec 1000<>testfifo
rm -rf testfifo
for ((n=1;n<=10;n++))
do
echo >&1000
done
start=`date "+%s"`
for ((i=1;i<100;i++))
do
read -u1000
{
echo success$i; sleep 5
echo >&1000
}&
done
wait
end=`date "+%s"`
echo "time: `expr $end - $start`"
exec 1000>&-
exec 1000<&-
根据我个人的理解, 所谓的多进程 只不过是将多个任务放到后台执行而已,很多人都用到过,所以现在讲的主要是控制,而不是实现。
先看一个小shell:
每次的停顿中都能看到 只有10个进程在运行
一共耗时50s
一共100个任务,每次10个 ,每个5s 正好50s
上边的结果图之所以这么有规律,这是因为我们所执行的100个任务耗时都是相同的,
比如,系统将第一批10个任务放入后台的过程所消耗的时间 几乎可以忽略不计,也就是说
这10个任务几乎可以任务是同时运行,当然也就可以认为是同时结束了,而按照刚才的分析,
一个任务结束时就会向文件描述符写入空行,既然是同时结束的,那么肯定是同时写入的空行,
所以下一批任务又几乎同时运行,如此循环下去的。
实际应用时,肯定不是这个样子的,比如,第一个放到后台执行的任务,是最耗时间的,
那他肯定就会是最后一个执行完毕。
所以,实际上来说,只要有一个任务完成,那么下一个任务就可以被放到后台并发执行了。