node.js 로 만든 멀티 프로세스(멀티 차일드 프로세스)
말이 좋아 멀티 프로세스지…그냥 설정된 명령어를 지정수 만큼 child process로 호출 출력값을 화면에 찍어주는 것. (설정으로 line기준으로 제어할 수 있다.)
테스트는 >node test.multi_process.js (테스트에서 외부 호출 명령에서 .php 가 사용되었음. php가 설치되어있어야함)
//– 4개 명령어를 (cpu는 4코어)
- 1개씩 실행 할 경우 : excute time:39623
- 2개씩 실행 할 경우 : excute time:19837
- 3개씩 실행 할 경우 : excute time:19867
- 2개와 차이가 거의 없는 이유는 4개중 3개 실행 후 1개를 실행하는데,
그룹으로 보면 (3)+(1) 에서 (3)의 실행시간이나 (1)의 실행 시간이 같다.
이건 (2)+(2)로 해도 같다. -
즉, 순차로 2번 실행하는 시간과 같다.
- 4개씩 실행 할 경우 : excute time:10192
//– useReadline를 사용한 경우 (라인 단위로 제어) -> 만든 이유가 대용량의 file을 line단위로 처리할경우, 파일을 잘라서 해당 부분을 처리후 바로 출력하면 끝나게 하기 위해서 -> 동시에 4개가 출력해도 라인 단위로 맞춰서 출력됨(순서는 뒤죽박죽이라도 line속의 내용은 섞이지 않음)
firstCmd 2: SLEEP(1) 1: SLEEP(1) 0: SLEEP(1) 3: SLEEP(1) 000020000200002000020000200002000020000200002 , 2014-12-19 15:03:03 END : 2 000010000100001000010000100001000010000100001 , 2014-12-19 15:03:03 END : 1 000000000000000000000000000000000000000000000 , 2014-12-19 15:03:03 END : 0 000030000300003000030000300003000030000300003 , 2014-12-19 15:03:03 END : 3 lastCmd ! excute time:10233
—–=—— useReadline를 사용 안한 경우 (바로 출력)(내용이 뒤섞인다.)
firstCmd 1: SLEEP(1) 0000132: SLEEP(1: SLEEP(1))
00000200030: SLEEP(1) 00000000010000030002000000000100000300020000000001000002000300000000010000030002 00000000010000030002000000000100000200030000000001000003000200000000010000020003 00000 , 2014-12-19 15:03:46 END : 1 , 2014-12-19 15:03:46 , 2014-12-19 15:03:46END : 2 END : 3 , 2014-12-19 15:03:46 END : 0 lastCmd ! excute time:10127
//——- test.php
<? ob_implicit_flush(1); // 바로 출력하도록 설정(출력 버퍼가 동작 안한다) ob_end_clean(); //출력 버퍼를 비운다.(이걸 안하면 이전 출력 버퍼가 데이터를 버퍼처리 하고있다.)
//$r = rand(0,1); $r = 1; echo $_SERVER[‘argv’][1].”: SLEEP(“.$r,”)\n”; //sleep($r); $icnt = 10; while(–$icnt){ echo sprintf(‘%05d’,$_SERVER[‘argv’][1]); usleep(500000); //0.5초 } echo “ , “.date(“Y-m-d H:i:s”),” END : {$_SERVER[‘argv’][1]}\n”; ?>