Pthread 활용
Pthread_create로 Thread를 생성한후 pthread_join으로 리턴값을 받아 드립니다. 이것이 여러번 시행시일시에는 그만큼 만들고 지우는것이 반복되 시간상 손실이 발생하게 되더군요.
while(조건1 ){
for(i 만큼 반복 ){
pthread_create(&p_thread[j],NULL,t_function,NULL);// t_function 반복
}
for(i만큼 반복){
pthread_join(t_function 리턴값을 받음);
}
}
while문이 없으면 상관이없겠지만 create하고 join 해서 기다리는 작업이 많이 생기므로 i가 100이라면
100개를 만들고 100개를 기다리고 다시 0개에서 100개를 만들고 100개를 기다리고 작업이 반복되서
결국 while문이 길어지면 길어질수록 속도도 느려지더라구요....
join으로 리턴값을 받는 상황이라.......0~100개를 만들고 0~100개를 기다리고 이런 상황이아닌 100개를 유지하면서 리턴값을 계속 받을수있는 방법이 없을까요????
for(i 만큼 반복 ){
pthread_create([i]갯수 만큼 생성);
}
while(조건1 ){
for(i만큼 반복){
pthread_join(리턴값을 받음);
}
}
위와 같이 생성해놓고 쓰레드 생성해놓은것을 계속 재활용 하고 싶은데.....
어떤 방법을 사용하면 좋을까요?
Thread Pool을 구현해서 해서 스케줄링까지 다 해야할까요?
thread safe 한 queue 두 개를
thread safe 한 queue 두 개를 써서(input, output), 각 스레드에서는 input queue가 빌 때 까지 하나씩 꺼내와서 처리하고 결과(리턴값)를 output queue에 넣습니다.
input queue가 비었으면 스레드를 종료하거나, 아니면 block 했다가 필요할 때 다시 resume해서 쓰면 됩니다. (block & resume을 할려면 thread pool이 필요하겠죠)
main 에서 thread 가 리턴한 값을 받아야
main 에서 thread 가 리턴한 값을 받아야 하는 상황이 왜 필요한가?
이 부분이 핵심일것 같은데요.
스레드 결과를 사용할 경우에는 메인 스레드와의 통신 프로토콜을
따로 만들어서 사용하는게 낫습니다.
---------
간디가 말한 우리를 파괴시키는 7가지 요소
첫째, 노동 없는 부(富)/둘째, 양심 없는 쾌락
셋째, 인격 없는 지! 식/넷째, 윤리 없는 비지니스
이익추구를 위해서라면..
다섯째, 인성(人性)없는 과학
여섯째, 희생 없는 종교/일곱째, 신념 없는 정치
thread가 리턴하는 시간값을 합산해서 총합을
thread가 리턴하는 시간값을 합산해서 총합을 구해야하는 상황이라서요.....
댓글 달기