[질문] Linux나 Solaris에서 pthread_mutex 갯수 제한!!??
글쓴이: hohory / 작성시간: 토, 2006/07/22 - 2:29오후
Linux나 Solaris에서 pthread_mutex를 이용하려 하는데요..
하나의 프로그램에서 만들수 있는 pthread_mutex 갯수 제한이 있는지요?
file descriptor같은 경우 너무 많은 파일이 동시에 열리면,
에러가 나는것처럼, mutext도 동시에 너무 많은 갯수의 것이 이용되고 있으면
에러가 나는지 궁금합니다.
현재 개발중인 프로그램에서 mutex를 하나의 프로세스에서 1만개 정도 열려고합니다.
시스템은 Solaris 9이고, Linux로 포팅되기도 합니다.
고수님들의 고견 부탁드립니다.
수고하세요~
Forums:
제한 없는 걸로 알고 있습니더~
솔라리스는 모르겠지만
리눅스환경에서는(특이한 thread library를 안쓴다면)
자신의 원하는 수만큼의 pthread_mutex_t타입 변수를 정의할 수 있는 만큼
메모리가 크면 얼마든지 사용할 수 있습니다.
물론 너무 많이 메모리 사용량이 커져서 프로세스 크기 제한에 걸리지만 않는다면요...
/***************************************
Being the one is just like being in love.
***************************************/
제한이 있는게 더 당연한것 아닌가요?
어.. 쓰레드쪽은 잘 모르겠지만 일반적으로 시스템 콜에서 리소스를 사용할 때는 어느정도 제한값이 다 있는것으로 알고 있는데요..
이런 경우 시스템 제한 값과 프로세스당 제한 값이 나뉘어지겠지만요..
그래서 위 글을 보고 헤더 화일을 뒤져보니..
(리눅스 레드헷 9입니다)
/usr/include/bits/local_lim.h
에 보니 _POSIX_THREAD_THREADS_MAX는 즉 프로세스당 스레드 개수는 64개로 제한되 있는것 같습니다.
그 아래에 UNDEF 되어 있는 PTHREAD_THREADS_MAX 를 보니 시스템 전체에 대한 제한은 없는것 같구요..
이걸 보면 제 추측이 맞을 것 같은데요..
그리고 솔라리스에도 당연히 어떤 제한값이 있을 것으로 생각됩니다.
PTHREAD_MAX_THREADS
ls -al 'happy' | grep 'possible'
A few Good Man
pthread_mutex의
pthread_mutex의 경우에는 제한이 없다고 판단이 됩니다.
(제가 소스를 보지는 않았습니다만)
왜냐하면, 어떤 프로그램에서 int 변수의 갯수가 제한이 있지 않는 것과 마찬가지
이기 때문입니다.
semaphore같은 자원은 커널에서 관리되고, 사용하는 프로세스에서
시스템 콜을 경유하기 때문에 자원에 대한 제한을 가하는 것이
타당합니다.
그러나, phread_mutex의 경우에는 일반적으로 변수 한두개 정도(CAS op를 위한)
가 모두입니다.
예외적으로 이 mutex에서 Thread간의 경합으로 인해 waiting이 발생하게 되면,
그때 system call이 발생하게 되는데, 이러한 형태의 동작이면
굳이 제한을 둘 필요가 없어 보입니다.
그냥 상식선에서 생각해 보았습니다.
참고로, 제가 개발하는 제품에서 pthread_mutex가 천개가 넘습니다만,
이것으로 제한이 걸린 적은 없습니다.
linux, sun, solaris, windows, aix, dec, vxworks, wince 와 같은 환경에
포팅이 되어있습니다.
참고하시길.
고도의 추상화, 극도의 구체화, 에디슨을 그리워하다.
고도의 추상화, 극도의 구체화, 에디슨을 그리워하다.
cat
cat /proc/sys/kernel/threads-max 로 확인가능합니다.
linux에서는 프로세스 구분없이 시스템상의 전체수 제한입니다.
echo 수 > 상기 로 수정가능하구요.
cat
cat /proc/sys/kernel/threads-max 로 확인가능합니다.
linux에서는 프로세스 구분없이 시스템상의 전체수 제한입니다.
echo 수 > 상기 로 수정가능하구요.
댓글 달기