24'C 구름 많음
서울 강남구
PHP5이상에서는 curl_multi_init 함수를 이용 가능하다.
curl_multi_init 함수를 이용하여 비동기 처리를 해보려 한다.
아래와 같이 코드를 작성하면 url변수에 담긴 주소들에 비동기 방식으로 접근 가능하다.
do while 하단의 foreach를 이용하여 정상적으로 처리되었나를 처리하여
DB에 commit, rollback을 선택하는 등의 코드 작성 또한 가능하다.
만약에 동기 형태의 코드로 curl을 작성했다면 한 번에 하나의 url처리를 하게 되므로
10개의 처리과정은 다음과 같이 된다.
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
1번 실행 -> 1번 완료 -> 2번 실행 -> 2번 완료 반복...
완료 시까지 아무 일도 안 하고 대기를 하게 된다.
CPU 성능은 남아도는데 네트워크 처리속도가 가로막게 된다.
그러나 비동기로 처리 시 1번 실행 시 10번까지 실행을 하고 처리된 대로 완료 신호를 따로 받는다.
while문이 실행 중이기 때문에 해당 코드에서는 모두 완료되면 while 탈출하여 완료 처리 과정을 진행할 수 있다.
만약 CPU가 성능이 10개는 한 번에 처리할 능력이 된다면
비동기로 실행한 경우가 동기로 실행한 경우보다 10배 빠르게 된다.
1개 완료가 되어야 다음 것을 실행한다면 같은 시간에 10개도 처리가 가능한데 기다리고 있으므로 10개를 모두 실행해 완료한 시간과 동일하게
1~10 |
한 번에 끝~