Thread Idle
글쓴이: kimsk99 / 작성시간: 목, 2003/09/04 - 4:55오후
Solaris에서 pthread를 이용해서 multithread programming을 하고 있습니다.
수행해야할 작업이 없어서 잠시동안 thread를 idle시켜야 할 때 어떻게 해야 할까요?
여러가지 방법을 찾아 봤지만 명확한 방법을 찾지 못했습니다.
제가 찾아본 방법과 그것에 따른 문제점을 정리해 보면 다음과 같습니다.
1. sleep(int)
sleep시간을 0으로 넣으면 idle상태가 존재하지 않고 CPU를 100%점유하고, 1초씩 시간을 넣으면 대기 시간이 많아져서 reponse에 문제가 따라서 포기.
2. usleep(int)
multithread safe function이 아니라서 포기.
3. pthread_yield
CPU를 100% 먹는 문제로 포기. (거의 sleep(0)과 같은 결과를 보입니다.)
뭔가 좋은 방법이 없을 까요?
Forums:
select를 사용한 슬립을 구현함은...
아래글 중간쯤에 보면 null을 select에 주어서 지연 시키는것이 있는데
이것으로 구현해 보심이..;;
http://bbs.kldp.org/viewtopic.php?t=21105&highlight=sleep+%B1%B8%C7%F6
울랄라~ 호기심 천국~!!
http://www.ezdoum.com
위의 분 말씀처럼 select를 쓰시는게 가장 무난할 듯 싶습니다.
위의 분 말씀처럼 select를 쓰시는게 가장 무난할 듯 싶습니다.
50~300 uSec 정도의 범위로 놓고 select를 호출하시면,
어느정도 CPU점유량이 감소하는 것을 확인하실 수있습니다.
이 값은 설치된 CPU의 파워하고, 해당 쓰레드가 일을 수행하게되는
양과의 관계를 적절하게 튜닝해서 설정하셔야 할 것 같습니다.
저의 경우에는 Minimum sleep과 Maximum sleep 값을 미리
고정시켜놓고, Load가 많을 경우 sleep을 줄이고,
Load가 적을 경우 sleep 시간을 늘려서
서비스 요구에 대해 어느정도 적응을 시키고 있습니다.
플랫폼 마다 사용하는 select 시스템 콜이 사용하는
CPU의 점유율도 각기 다르기 때문에
신중히 값을 결정하셔야 할 것 같습니다.
그럼 이만.
김성진 드림
PS) 경험상 HP가 가장 많은 CPU를 사용하더군요. -_-;;
(괜히 관계되는 분께 욕먹는게 아닌지....)
고도의 추상화, 극도의 구체화, 에디슨을 그리워하다.
null select이 가능하군요.. 답변에 감사드립니다.
null select이 가능하군요..
답변에 감사드립니다.
댓글 달기