Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C 언어로 프로세스 내 생성 가능한 최대 스레드 개수 확인하기

이 글에서는 C 언어로 하나의 프로세스 안에서 생성할 수 있는 최대 스레드 개수를 구하는 방법을 알아봅니다.

스레드란 무엇인가?

스레드(Thread)는 경량 프로세스(Lightweight Process)라고도 불리며, 스케줄러에 의해 독립적으로 관리될 수 있는 실행 단위입니다. 스레드는 프로세스를 구성하는 요소이기 때문에 하나의 프로세스에 여러 개의 스레드를 연결할 수 있으며, 프로세스보다 가볍기 때문에 컨텍스트 스위칭(Context Switching)에 소요되는 시간도 훨씬 짧습니다.

또한 스레드는 프로세스에 비해 적은 시스템 자원을 필요로 하며, 같은 프로세스에 속한 피어 스레드(Peer Thread)들과 메모리를 공유합니다. 운영체제는 모든 사용자 레벨 피어 스레드들을 하나의 작업으로 취급하며, 스레드의 생성과 종료 역시 프로세스에 비해 적은 시간이 걸립니다.

참고로 아래 프로그램은 시스템 상태와 사용 가능한 리소스에 따라 매번 실행할 때마다 결과값이 달라질 수 있습니다.

프로그램의 접근 방식

  • void* create(void *) 함수를 생성하고, 이 함수는 스레드의 동작만 보여주는 용도이므로 내부를 비워둡니다.
  • main() 함수에서 최대 스레드 개수를 저장할 max와 반환값을 저장할 ret이라는 두 개의 int형 변수를 0으로 초기화합니다.
  • pthread_t 타입의 변수 th를 선언합니다.
  • ret == 0을 조건으로 하는 while 반복문을 실행하고, 그 안에서 ret = pthread_create(&th, NULL, create, NULL);을 호출합니다.
  • 반복문 내부에서 max++로 카운트를 증가시킵니다.
  • 반복문이 종료된 후 max 값을 출력합니다.

예제 코드

#include<pthread.h>
#include<stdio.h>
/* 스레드의 동작만 보여주는 용도이므로
함수 내부는 비워둔다 */
void *create ( void *){
}
//main 함수
int main(){
    int max = 0, ret = 0;
    pthread_t th;
    //반환값이 0일 때까지 반복
    while (ret == 0){
        ret = pthread_create (&th, NULL, create, NULL);
        max++;
    }
    printf(" %d ", max);
}

실행 결과

5741

위 예제에서는 pthread_create() 호출이 실패하여 0이 아닌 값이 반환될 때까지 스레드를 계속 생성하면서 그 개수를 세는 방식으로 동작합니다. 출력된 5741은 해당 환경에서 생성 가능했던 스레드의 개수이며, 시스템의 메모리 크기, 스택 크기 설정(ulimit), 운영체제 정책 등에 따라 값이 달라집니다.