Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux Shell脚本,并行和多线程?_Linux_Multithreading_Shell_Parallel Processing - Fatal编程技术网

Linux Shell脚本,并行和多线程?

Linux Shell脚本,并行和多线程?,linux,multithreading,shell,parallel-processing,Linux,Multithreading,Shell,Parallel Processing,我有一个shell脚本,它实际上有文件/文件夹位置和运行javascript的命令。我在一个linux集群上运行这个作业,每个集群有8个处理器和4个CPU核。我希望在多个处理器上运行该脚本,同时每个作业访问多个线程,以减少脚本的总运行时间。我的问题是: 这可能吗?如果是,该命令或代码段是什么?您可以使用。例如: parallel "zcat {} | bzip2 >{.}.bz2 && rm {}" ::: *.gz 这将使用bzip2重新压缩当前目录中名称以.gz结尾的

我有一个shell脚本,它实际上有文件/文件夹位置和运行javascript的命令。我在一个linux集群上运行这个作业,每个集群有8个处理器和4个CPU核。我希望在多个处理器上运行该脚本,同时每个作业访问多个线程,以减少脚本的总运行时间。我的问题是: 这可能吗?如果是,该命令或代码段是什么?

您可以使用。例如:

parallel "zcat {} | bzip2 >{.}.bz2 && rm {}" ::: *.gz
这将使用bzip2重新压缩当前目录中名称以.gz结尾的所有文件,每个CPU(-j+0)并行运行一个作业


如果您没有parallel,那么您可以通过以下两种方式使用自己的协调器:

  • 使用
  • 使用bash内置背景(
    &

  • 您可以使用
    ssh
    在远程计算机上运行命令,也可以使用
    nfs
    或其同类产品进行网络存储。无论您如何做,您都需要考虑如何划分作业,以便它们能够协作,并在需要时合并结果。

    您能展示您想要运行的代码吗?另外,为了澄清,我们是在谈论8台独立的linux机器,它们可以访问同一个文件系统吗?您的代码生成了什么?shell脚本的内容如下:ts=ts/out=ers/db=db/ks=ks/ids=list/ids que=que/bin/java-Xmx2400M-classpath java/class/FEP“$@”-db$db-ks$ks-ids$ids-que$que-ts$ts-out$out>$log 2>&1我试着用:nohup ss.sh>&p运行我的脚本,其中p保持在1000到50000之间。通过这种方式,它显示只有1/8的CPU被使用在接近100%的地方。我假设(不确定)这样它在一个CPU上使用了p个线程。我还分别尝试使用:#/如果($i%20==0)),则i的bin/bash为$(seq 1 32)do(scripts/findEpitopePartners1.sh nosurf seqintonly>&100);然后等待;fi done wait我在stackoverflow的一个线程中找到了这个,哪个inturn启动了20个javascript实例,但各个进程运行得太慢。我不确定
    nohup
    &p
    将如何生成多个实例,而目前您仍然只运行一个Java进程。这个Java进程是否按顺序处理所有文件?您要做的是为要运行的每个文件调用不同的Java实例。我仍然不太明白进程在做什么,或者您希望如何分割线程。有一些文件,每个都需要处理,对吗?我在这个集群上只有用户级权限,这意味着我无法安装需要root权限的程序。我读过这个GNU并行的东西,但当我并行输入时。。。。我收到一条错误消息parallel command not found您不需要
    parallel
    从一个shell脚本运行多个作业,尽管这确实使它更容易。将
    &
    放在shell脚本中的一行末尾将继续,而无需等待该行完成。但这对多台机器没有帮助。如果您显示代码,我们可能会提供帮助。@user4880140将并行源代码下载到您的主目录,构建它,然后从本地构建运行它。在GNU、*BSD和OSX上,您也可以使用
    xargs-P