프로그램

prefork

고요한하늘... 2014. 5. 14. 22:04

간단하게 구현할때는 입력이 들어왔을때

forking하여 process를 생성하고 작업이 완료되면 해당 프로세스를 종료하면 된다.

그런데 요청이 들어올때마다 process를 생성하기 때문에 속도는 기대할수 없다.


이런 부분을 개선하고자 boss-worker 방식과 prefix 방식이 존재한다.

boss-worker는 boss가 worker에게 job을 할당하는 방식이다. boss와 worker간의 데이터 교환이 빈번하기 때문에

multi thread로 구현할때 주로 사용하고

multi process일때는 대게 prefork 방식으로 구현한다.


prefork는 accept전제 미리 fork를 한다는 의미이고

생성된 모든 프로세스사 accept를 있다가 커널이 크라이언트를 연결해주면 해당 프로세가 처리하고 다시 accept상태로 대기하는 방식이다.



PREFORK의 얼개를 간단히


parent_pid = getpid();


for( i = 0; i < MAX_PROCESS_NUM; i++)

{

       child_pid = fork();//child
       if( child_pid == 0 )//child
       {         
                        while(1)// 작업이 완료되면 다시 accept로가 블락킹된다.
                        {
                   accept();
                   do_something();//
             }
       }
       else if(child_pid < 0)
      {
            error;
       }

}



if(getpid() == parent_pid)

{

       waitpid();

}

'프로그램' 카테고리의 다른 글

linux vim color setting   (0) 2014.06.24
http protocol  (0) 2014.05.14
hadoop to local-server  (0) 2014.01.03
malloc 2G 이상 메모리 할당  (0) 2013.11.15
core dump 남기기  (0) 2013.04.29