002 - Shell 의 병발 집행 원리 와 그 실현

1. 정상 적 인 집행
여러 명령 이 실행 된다 면 기본적으로 직렬 로 실 행 됩 니 다.앞의 작업 이 완료 되 지 않 으 면 뒤의 작업 을 수행 할 수 없습니다. 즉, 명령 을 CPU 에 두 고 실행 할 수 없습니다.
sleep 10

백 스테이지 실행.Default 모드 에서 셸 명령 은 실행 을 막 습 니 다. 그 다음 에 추가 & 이 명령 을 다른 단계 로 실행 할 수 있 습 니 다. 예 를 들 어:
sleep 10 &

이 명령 을 실행 한 후 10 초 간 막 히 지 않 고 바로 돌아 갑 니 다.
2. 병행 집행
메모: 이 병렬 실행 이 단일 핵 CPU 라면 실제로 병렬 실행 을 말 합 니 다.병행 집행 은 병행 집행 의 전제 요 소 를 갖 추고 있다.
이 방법 을 while 순환 에 사용 하면 다 중 프로 세 스 병행 처 리 를 실현 할 수 있 습 니 다.예 를 들 어 test 1. sh 파일 은:

#!/bin/bash
while read line
do
{
  command 1
} &
done

command 2

이렇게 하면 command 1 을 병행 할 수 있 습 니 다. 실질 적 으로 모든 command 1 명령 을 배경 프로 세 스 로 실행 하 는 것 입 니 다. 그러면 메 인 프로 세 스 는 앞의 명령 이 실 행 된 후에 야 다음 명령 을 실행 할 필요 가 없습니다.ls - l | test 1. sh 를 실행 하면 동시 다발 프로 세 스 수 를 볼 수 있 습 니 다.
그러나 이렇게 문 제 를 가 져 옵 니 다. while 순환 밖의 command 2 가 순환 내부 에서 실 행 된 결 과 를 사용 해 야 한다 면 test 1. sh 와 같은 쓰기 방법 은 work 가 아 닙 니 다.우 리 는 그것 에 대해 간단 한 수정 을 하여 상술 한 목적 을 달성 할 수 있다. 예 를 들 어 test 2. sh:

#!/bin/bash
while read line
do
{
  command 1
} &
done
wait

command 2

위의 코드 는 모든 command 1 을 배경 에서 병행 하여 실행 하고 순환 안의 명령 이 끝 난 후에 야 다음 command 2 를 실행 합 니 다.
3. 셸 스 크 립 트 의 병행 제어
병발 프로 세 스 수가 너무 많아 기계 가 끊 기 는 것 을 피하 기 위해 서 는 병발 수량 을 제한 해 야 할 때 도 있다.다음 코드 는 이 기능 을 실현 했다.
#!/bin/bash
while read line
do
{
  joblist=($(jobs -p))
  while (( ${#joblist[*]} >= 20 ))
  do
  {
      sleep 1
      joblist=($(jobs -p))
  }
  done
  sleep 10 &
}
done

이상 의 방법 은 배경 작업 수 를 제어 하여 병발 프로 세 스 수 를 20 개 이내 로 제어 합 니 다.
참고:https://blog.csdn.net/p656456564545/article/details/80681934

좋은 웹페이지 즐겨찾기