并行执行有限制吗?如果是,如何找出最大限制?
我正在创建一个脚本,该脚本创建一串由“&”连接的脚本,并使用 eval 将它们全部执行。像这样的东西:
scriptBuilder="ksh -x script1.sh & ksh -x script2.sh & ksh -x script3.sh";
eval $scriptBuilder;
只是想确定服务器上并行执行的最大限制是多少。
答案1
该命令ulimit -u
显示您可以启动的最大进程数。但是,实际上不要在后台启动那么多进程:您的计算机会花费时间在进程之间切换,而不会抽出时间来完成实际工作。
对于 CPU 密集型任务,请运行与计算机上的核心数量相同或更多的任务。如果有足够的 RAM 来容纳所有这些进程及其文件缓存:如果并行进程竞争 I/O 带宽以不断重新加载数据,它们的运行速度将比顺序运行它们慢。你可以查找其中的核心数/proc/cpuinfo
。
每个处理器运行一个任务的简单方法是使用GNU并行。
如果任务受 I/O 限制并使用相同的外围设备(例如,它们访问同一磁盘上的文件),通常最好按顺序运行它们。