분리 vs.결합형 POSIX 스레드
나는 줄곧 그 제품을 사용해 왔다.pthread
C에서 스레드 생성 및 결합을 위한 라이브러리.
처음부터 분리되어 있는 스레드를 언제 생성해야 하는가?결합 가능한 스레드와 비교하여 어떤 성능상의 이점을 제공하는가?
A를 하지 않는 것이 합법적인가?
pthread_join()
연결 가능한(기본적으로) 나사산에 연결 가능한(기본적으로)또는 그러한 스레드가 항상detach()
보다 먼저 기능하다.pthread_exit()
ing?
다음 스레드를 기다리지 않을 경우 분리된 스레드를 만드십시오.
pthread_join()
유일한 성능 이점은 분리된 스레드가 종료될 때 스레드가 결합될 때까지 기다리지 않고 스레드를 즉시 방출할 수 있다는 것이다.조인 가능한 스레드에 가입하지 않는 것은 '법적'이지만, (앞서 언급한 바와 같이) 스레드가 결합될 때까지 자원이 풀리지 않기 때문에 (프로그램이 종료될 때까지) 무한정 묶여 있는 상태로 유지될 것이기 때문에, 일반적으로 권장되지 않는다.
처음부터 분리되어 있는 스레드를 언제 생성해야 하는가?
응용 프로그램이 스레드가 언제 완료되는지, 그리고 스레드의 반환 값에 대해 신경쓰지 않을 때마다(스레드는 를 통해 값을 다른 스레드/애플리케이션으로 다시 전달할 수 있다).
예를 들어, 클라이언트-서버 애플리케이션 모델에서 서버는 각 요청을 처리하기 위해 새 스레드를 작성할 수 있다.그러나 서버 자체는 스레드의 반환 값에는 신경 쓰지 않는다.그렇다면 분리된 실을 만드는 것이 이치에 맞는다.
서버가 확인해야 할 것은 현재 처리된 요청이 완료되었다는 것뿐이다.전체 프로그램/응용 프로그램을 종료하지 않고 메인 스레드를 종료하는 것만으로 그렇게 할 수 있다.프로세스의 마지막 스레드가 종료되면 애플리케이션/프로그램이 자연스럽게 종료된다.
이 유사음식은 다음과 같이 보일 수 있다.
/* A server application */
void process(void *arg)
{
/* Detach self. */
pthread_detach(pthread_self());
/* process a client request. */
pthread_exit(NULL);
}
int main(void)
{
while (not_done) {
pthread_t t_id;
errno = pthread_create(&t_id, NULL, process, NULL);
if (errno) perror("pthread_create:");
}
/* There may be pending requests at this point. */
/* Just exit the main thread - not the whole program - so that remaining
requests that may still be processed can continue. */
pthread_exit(NULL);
}
다른 예로는 애플리케이션이 실행되는 동안 일정한 간격으로 일부 정보를 기록하는 데몬 또는 로거 스레드가 있을 수 있다.
결합 가능한 스레드와 비교하여 어떤 성능상의 이점을 제공하는가?
성능 측면에서 결합 가능한 스레드와 분리된 스레드는 차이가 없다.유일한 차이점은 분리된 스레드의 리소스(예: 스레드 스택 및 관련 힙 메모리 등)가 구현별로 다르다는 것이다.
조인 가능한(기본적으로) 쓰레드에서 pthread_join()을 수행하지 않는 것이 합법적인가?
네, 실에 가입하지 않는 것은 합법적인 겁니다.pthread_join
당신이 필요하지 않는 한 결코 사용할 필요가 없는 정의로운 편의 기능이다.그러나 생성된 스레드는 기본적으로 조인 가능한 스레드라는 점에 유의하십시오.
예를 들어, 여러분이 참여하고 싶을 때, 스레드가 그들 사이에 갈라진 "조각" 작업을 할 때 입니다.이 경우 계속하기 전에 모든 스레드가 완료되었는지 확인하십시오.작업농장 병행주의가 좋은 예다.
또는 그러한 스레드는 항상 pthread_exit()보다 먼저 분리() 함수를 사용해야 하는가?
그럴 필요 없어.하지만 당신은 종종 당신이 결합할 수 있는 실을 원하는지 아니면 분리된 실을 원하는지 결정하기를 원할 것이다.
속성을 설정하여 분리 가능한 스레드를 생성할 수 있지만PTHREAD_CREATE_DETACHED
에 대한 호출을 통해, 스레드는 어떤 시점에서든 분리할 것을 결정할 수 있다. 예를 들어, 스레드 ID를 가진 스레드는 ()pthread_t
다른 스레드의 )은(와) 분리할 수 있음pthread_detach(thread_id);
.
참조URL: https://stackoverflow.com/questions/3756882/detached-vs-joinable-posix-threads
'programing' 카테고리의 다른 글
Vue는 두 프로젝트 간에 구성 요소 및 자산 공유 (0) | 2022.05.03 |
---|---|
Vuex의 nuxt 구성을 내부 작업으로 가져오는 방법 (0) | 2022.05.03 |
데이터로 전체 페이지를 바인딩하는 올바른 방법 또는 vuejs 방법은 무엇인가? (0) | 2022.05.03 |
조건에 따른 VueJS HTML 요소 유형 (0) | 2022.05.03 |
죄와 코스를 함께 계산하는 가장 빠른 방법은 무엇일까? (0) | 2022.05.03 |