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个任务几乎可以任务是同时运行,当然也就可以认为是同时结束了,而按照刚才的分析,
一个任务结束时就会向文件描述符写入空行,既然是同时结束的,那么肯定是同时写入的空行,
所以下一批任务又几乎同时运行,如此循环下去的。
实际应用时,肯定不是这个样子的,比如,第一个放到后台执行的任务,是最耗时间的,
那他肯定就会是最后一个执行完毕。
所以,实际上来说,只要有一个任务完成,那么下一个任务就可以被放到后台并发执行了。

相关文章:

  • 2021-06-11
  • 2022-01-17
  • 2022-12-23
  • 2022-12-23
  • 2021-12-28
  • 2021-11-12
  • 2021-04-27
  • 2022-12-23
猜你喜欢
  • 2021-11-09
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案