免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1312 | 回复: 0
打印 上一主题 下一主题

linux下的并发处理 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-11-27 07:02 |只看该作者 |倒序浏览
linux下的并发处理
                        
#!/bin/bash
tmpfile=$$.fifo #创建管道名称
mkfifo $tmpfile #创建管道
exec 4$tmpfile #创建文件标示4,以读写方式操作管道$tmpfile
rm $tmpfile   #将创建的管道文件清除
                                                                                
thred=4 #指定并发个数
seq=(1 2 3 4 5 6 7 8 9 21 22 23 24 25 31 32 33 34 35) #创建任务列表
                                                                                
# 为并发线程创建相应个数的占位
{
for (( i = 1;i出一个占位换行
done
} >&4 #将占位信息写入管道
                                                                                
for id in ${seq
  • } #从任务列表 seq 中按次序获取每一个任务
    do
      read #读取一行,即fd4中的一个占位符
      (./ur_command ${id};echo >&4 ) & #在后台执行任务ur_command 并将任务 ${id} 赋给当前任务;任务执行完后在fd4种写入一个占位符
    done &- #关闭管道
    整个流程中read 和 echo 对fd4的交替写入和读取是并发处理的关键
    可以想象 如果read 命令发现fd4中没有数据时 将等待fd4的数据
    如果可以自动kill掉超时的子任务就更好了
    原文:能不能用shell做一个队列
    http://www.chinaunix.net/jh/24/675452.html
    r2007 回复于:2005-12-24 19:27:15
    #!/bin/bash
    tmpfile=$$.fifo
    mkfifo $tmpfile
    exec 4$tmpfile
    rm $tmpfile   #以上工作---开一包间(一楼4号房间)
    { echo;echo;echo;echo; } >&4  #摆一桌麻将,4张椅子
    for (( i = 1 ; i &4 ) &   #开始打牌ing...;bp机响了,是GF的,归还椅子走人
    done $tmpfile
    rm $tmpfile   #以上工作---开一包间(一楼4号房间)
    thred=4
    seq=(1 2 3 4 5 6 7 8 9 21 22 23 24 25 31 32 33 34 35)
    #
    {
    for (( i = 1;i&4
    for id in ${seq
  • }
    do
      read
      (./ur_command ${id};echo >&4 ) &
    done
                   
                   
                   

    本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/40226/showart_2105043.html
  • 您需要登录后才可以回帖 登录 | 注册

    本版积分规则 发表回复

      

    北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
    未成年举报专区
    中国互联网协会会员  联系我们:huangweiwei@itpub.net
    感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

    清除 Cookies - ChinaUnix - Archiver - WAP - TOP