加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux – Bash:在多个核心上运行相同的程序

发布时间:2020-12-13 18:49:30 所属栏目:Linux 来源:网络整理
导读:我可以访问一台可以访问10个内核的机器 – 我想实际使用它们.我习惯在自己的机器上做的事情是这样的: for f in *.fa; do myProgram (options) "./$f" "./$f.tmp"done 我有10个文件我想这样做 – 让我们称之为blah00.fa,blah01.fa,… blah09.fa. 这种方法的
我可以访问一台可以访问10个内核的机器 – 我想实际使用它们.我习惯在自己的机器上做的事情是这样的:
for f in *.fa; do
  myProgram (options) "./$f" "./$f.tmp"
done

我有10个文件我想这样做 – 让我们称之为blah00.fa,blah01.fa,… blah09.fa.

这种方法的问题是myProgram一次只使用1个核心,并且在多核机器上这样做我一次使用1个核心10次,所以我不会使用我的mahcine来它的最大能力.

我怎么能改变我的脚本,以便它同时运行我的所有10个.fa文件?我看了Run a looped process in bash across multiple cores,但是我无法从那里得到命令来做我想要的.

解决方法

你可以用
for f in *.fa; do
    myProgram (options) "./$f" "./$f.tmp" &
done
wait

这将并行启动所有工作,然后等到它们全部完成后再继续.如果您有比核心更多的作业,您将启动所有这些作业,并让您的操作系统调度程序担心交换进程.

一种修改是一次启动10个工作

count=0
for f in *.fa; do
    myProgram (options) "./$f" "./$f.tmp" &
    (( count ++ ))        
    if (( count = 10 )); then
        wait
        count=0
    fi
done

但这不如使用并行,因为你不能像旧的那样开始新工作,而且在你设法开始10个工作之前,你也无法检测到旧工作是否完成. wait允许您等待单个特定进程或所有后台进程,但不会让您知道任何一组任意后台进程何时完成.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读