[완료] 대기하고있는 프로그램 만들기
글쓴이: visualplus / 작성시간: 수, 2009/03/11 - 2:20오후
소켓의 accept()나 select() 같은것들은 어떤 원리로 구현이 되어있는건지 궁금합니다.
가령
int main() { return 0; }
란 프로그램이 있을 경우 실행하면 그냥 끝나버리는데, 특정 신호가 들어오면 행동을 하도록
계속 끝나지 않도록 하고있게 하려면
int main() { signal(...); while (1) { } return 0; }
이런식으로 만들었습니다. 그런데 이렇게하면 cpu사용량이 너무 올라가버려서
int main() { signal(...); while (1) { sleep(1); } return 0; }
이런식으로 while문 중간에 1초간 대기하라고 해서 cpu사용량을 낮췄는데..
그런데 이렇게 하면 특정 신호가 왔을 때 1초 뒤에 반응 할 수 도 있겠지요.
그럼.. 소켓에서 accept()나 select()같은 경우는 클라이언트가 접속하면 즉각 반응을 해주고,
cpu사용률도 높지않던데.. 이런건 어떻게 구현을 하는지 궁금합니다.
소스를 보고 이해하면 좋겠지만.. 제가 그럴 실력이 아니라.. 이런게 어떤 원리로 돌아가는지만이라도
알고싶은데..
혹시 이런 류의 프로그래밍 기법들이 있는건지요?
Forums:
소켓..
소켓의 구현 원리는 파일을 읽고 쓰는것과 똑같습니다.
---------------------------------------------------------------------------------------------------------------
루비 온 레일즈로 만들고 있는 홈페이지 입니다.
http://jihwankim.co.nr
여러 프로그램 소스들이 있습니다.
필요하신분은 받아가세요.
음.. 그럼 대기하고
음.. 그럼 대기하고 있는건 어떻게 만드는것인가요?
select 가 파일을 읽는것이라고 치면,
이렇게 동작을 할텐데..
저는 어떻게 아무런 동작없이 종료되지 않을수있는지 궁금합니다.
user space라면, pause(),
user space라면, pause(), sched_yield(), wait(), waitpid()등을 찾아보세요.
--
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://www.cinsk.org/cfaqs/
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://cinsk.github.io/cfaqs/
오!!
이런것들이 있었군요..
감사합니다!!
대기 함수라면
보통 signal 을 이용해서 내부 시스템 함수로 구현되어있는 걸로 압니다...
pause() 나 sched_yield() 라면 멀티쓰레드에서 사용하는 함수고 wait / waitpid 는 자식 프로세스 reap 함수니 약간 다를 것 같고요
pause / sched_yield 도 실은 내부적으로 signal 쓰는 걸로 알고 있습니다.
윈도우 프로그래밍할 때에는 Message 내부 api 를 많이 썼었는데
리눅스에서는 마땅한게 없어서 select 나 poll , mutex 등을 잘 사용하는게 맞을 듯 합니다
-----
안녕하세요 소프트웨어 공학센터 장원석 책임입니다.
http://www.software.kr
댓글 달기