여러 비동기 작업을 동시에 실행하고 모든 작업이 끝나길 기다리는 함수이다.
동기 작업 await는 세탁기를 돌리고 종료 되면 설거지를 시작하고, 설거지를 다 한 후에 TV를 본다면
비동기 작업 asyncio는 세탁기를 돌려 놓고 TV를 보면서 설거지를 하는 것이라고 생각하면 된다.



여러 비동기 작업을 동시에 실행할 수 있다
전체 실행 시간을 크게 단축할 수 있다
I/O 작업을 효율적으로 처리할 수 있다
독립적인 작업들을 병렬로 처리 가능하다




음료와 감자는 이미 준비되었지만 패티가 타버려서 패티를 다시 굽느라 패티 팀만 손해를 봤지
음료와 감자팀은 이미 메뉴를 준비하고 다음 다른 메뉴를 준비할 수 있어 영향이 없다.
버거가 늦어져도 음료 담당이 음료를 늦게 만들 필요가 없다.

1번 주문
2번 주문
결과 :
이런 식으로 한 팀의 지연이 다른 팀의 주문 처리에 영향을 주지 않는 것이 asyncio.gather의 큰 장점이다.

빅맥 세트를 시키면 햄버거, 음료, 감자튀김이 한 세트이기 때문에
3개의 음식이 모두 준비되어야 진동벨이 울리고 내가 음식을 가져갈 수 있다.

내가 빅맥을 시키면, 동시에
1. 그릴에서 패티와 빵을 굽고
2. 캐셔가 음료를 준비하며
3. 튀김기에서 감자튀김을 튀긴다

동기식으로 처리하면 (await) 패티를 다 굽고나서 빵을 굽고, 빵을 다 구우면 음료를 준비하고, 음료가 준비되면 감자튀김을 튀기기 때문에 패티는 다 식고 빅맥 세트에 엄청난 시간이 소요된다.
비동기식 (asyncio.gather)은 각 팀이 독립적으로 일하면서도 조화롭게 협업하고
주문부터 완성까지의 전체 시간이 단축된다, 피크 타임에도 효율적으로 주문 처리가 가능하고
한 파트에 문제가 생겨도 전체 운영에 차질이 최소화된다.
여러 개의 비동기 작업을 동시에 실행하고 모든 작업이
완료될 때까지 기다렸다가 결과를 한 번에 받는 기능이다.
빅맥 세트가 나오는 것처럼 음료가 먼저 준비되어도
버거와 프라이가 모두 같이 준비되어야 진동벨이 울리는 것과 같다.
여러 작업을 병렬로 처리하고 각 작업은 서로 영향을 주지 않고 독립적으로 실행된다.