0
각 파일 당 2 개의 작업을 수행하고 싶은 20 개의 파일이 있으며 각각 30 분이 걸립니다. 필자는 파일의 이름 목록을 포함하는 파일을 가져 와서 for 루프의 각 파일에 대해 반복하는 스크립트를 작성했습니다. 두 개의 루프를 작성하면 하나는 데이터의 전반부에서 작동하고 다른 하나는 데이터의 두 번째 절반에서 작동하고 완료된 후에는 "&"을 사용하여 시간이 반으로 줄어든 것을 발견했습니다. 이것은 병렬 처리로 간주됩니까?bash 스크립팅에서 병렬로 2 개의 루프 실행
코드는 다음과 같습니다
#!/bin/bash
for i in $(cat $1); do sample+=($i); done
tLen=${#sample[@]}
#loop works on first half of the data
for ((i=0; i<${tLen}/2; i++));
do
# operation 1 on ${sample[$i]}
# operation 2 on ${sample[$i]} which is dependent on operation 1
done &
#loop works on second half of the data
for ((i=${tLen}/2; i<${tLen}; i++));
do
# operation 1 on ${sample[$i]}
# operation 2 on ${sample[$i]} which is dependent on operation 1
done &
을 약 5 시간 10시간에서 감소이 시간까지! 파일을 나눌 청크의 수를 판별하고 각 청크마다 루프를 위해 별도로 실행하는 방법이 있습니까? 예를 들어 매개 변수로 스크립트에 4를 부여하면 파일을 4 개의 챈크 (각각 5 개)로 나누고 백그라운드에서 병렬로 각 분기마다 4 개의 루프를 실행합니다. 그래서 시간이 2.5 시간이됩니까?
'나는 대한의 파일이 (당신이 확장 경로 이름의 대상이 될 것이다) 와일드 카드가있는 경우 $이 (고양이 $ 1)'위험한 같습니다 여기
는 n 개의 덩어리에 대한 예입니다. 파일의 각 _line_을'sample' 배열에 넣으려면'mapfile -t sample < "$ 1"을 대신 사용하십시오 (훨씬 효율적입니다). –