node.js 로 만든 멀티 프로세스(멀티 차일드 프로세스)

1 minute read

말이 좋아 멀티 프로세스지…그냥 설정된 명령어를 지정수 만큼 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”; ?>


🔗original-link

Updated: