순차적 : for i in {1..1000}; do do_something $i; done
-너무 느림
병렬 : for i in {1..1000}; do do_something $i& done
-너무 많은 부하
명령을 병렬로 실행하는 방법 (예 : 순간 당 20 개 이하)?
이제는 일반적으로 hack과 같은 것을 사용 for i in {1..1000}; do do_something $i& sleep 5; done
하지만 이것은 좋은 해결책이 아닙니다.
업데이트 2 : 허용 된 답변을 스크립트로 변환 : http://vi-server.org/vi/parallel
#!/bin/bash
NUM=$1; shift
if [ -z "$NUM" ]; then
echo "Usage: parallel <number_of_tasks> command"
echo " Sets environment variable i from 1 to number_of_tasks"
echo " Defaults to 20 processes at a time, use like \"MAKEOPTS='-j5' parallel ...\" to override."
echo "Example: parallel 100 'echo \$i; sleep \`echo \$RANDOM/6553 | bc -l\`'"
exit 1
fi
export CMD="$@";
true ${MAKEOPTS:="-j20"}
cat << EOF | make -f - -s $MAKEOPTS
PHONY=jobs
jobs=\$(shell echo {1..$NUM})
all: \${jobs}
\${jobs}:
i=\$@ sh -c "\$\$CMD"
EOF
"i ="를 사용하려면 8 개의 공백을 2 개의 탭으로 바꿔야합니다.