程序推入后台、进程的限制

写了一个程序检查文件,写了一个shell是遍历目录,每检出一个文件就让程序来检查文件。

感觉运行时CPU只用了一个核,于是想改写shell成多进程,利用多个核。采用 & 将每个文件检测推入后台,打算让系统自己调度。

使用&之后,top发现每个核利用都大了好多,但是总时长反而比不推入后台还慢甚至很多。

由于遍历目录文件众多,虽然shell是逐个推入,由于shell只是挑出文件,因为文件数还是非常大,必然导致资源耗尽,处于等待退出进入这样调度的循环。

【 并不打算去修改系统关于资源的限制,参见

limit资源限制ulimit 详解_ulimit -a命令时,statck size-CSDN博客

也许是文件检测比较快,进程推入后台调度切换花费的时间更长。

也许是硬盘读取多进程效率低?cpu也只有4个核。生成内存盘,mount -t ramfs myramdisk /tmp/ramdisk。结果基本一致。

也曾利用管道,mkfifo, exec 3<>/tmp/xxx,按cpu核数发取令牌,检查程序放入后台,仍然比单核顺行执行慢。可能是read堵塞效率不高,或者是令牌数过少?

运行数值:建立ramdisk,单核顺行 29s;全部(1.7万多个文件)推入后台68s;4个令牌72s;128个令牌71s;208个令牌72s。

不发令牌推入后台每128个,休息0.001s,结果是71s;推入后台每1024个,sleep(shell)休息0.001s,结果是72s。

这个命令可以达到20s

find /tmp/ramdisk/ -type f|xargs -P 4 -I file bash -c ' { ./quanling "file" ; if [ $? -eq 0 ] ; then echo "file" ; fi  } '  采用-P 8也基本是20s左右。

我的目标是单核顺行29s,采用&推入后台利用多核,减少运行时间,经过多次试验,主代码如下:

                         if [ $(($SUMTOTAL % 100)) -eq 0 ] ; then
                                 wait
                         fi
                          ./quanling "$dir_or_file"  &     【检测程序】

抱歉没有记下来是哪位写的一般的系统也就是开300个进程左右,我试了1000和200还有100,基本都是15s左右。

基本达到第一级目的,时间缩半。哪位有类似经验,欢迎交流。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值