한 프로세스에서 사용가능한 pthread mutex 갯수에 제약이 있는지 궁금합니다.
글쓴이: vudghkzm / 작성시간: 화, 2007/01/02 - 4:15오후
mutex를 굉장히 많이 사용해야 할 필요가 생겼습니다. 적어도 몇 만개, 몇 십만개 정도로요..
객체 하나마다 mutex를 가지고 있어야 할 필요가 생겼습니다.
근데 pthread_mutext_init() 메소드의 man 을 보니.. EAGAIN 에러값에 대한 정의가 아래와 같이 나와있더라구요..
The system lacked the necessary resources (other than memory) to initialize another mutex.
객체가 생성되고 destory되고, 새로 생성되고 할 때 마다 mutex도 새로 생성하고, 파괴해야 할 거 같습니다만...
만약 새로 mutex를 생성할 때, EAGAIN 에러가 리턴되어 버리면 참으로 난감해 지게 되는데요..
보통 얼마정도의 mutex를 생성하면 EAGAIN 이 발생하는지 궁금합니다.
그리고 man 페이지에서 설명하는 resource 란게 구체적으로 무얼 말하는지도 궁금하네요.
결론적으로..mutex 라는 녀석이 어떤 것에 제약을 받게 되는지 궁금합니다.
Forums:
뮤텍스는 메모리를
뮤텍스는 메모리를 차지하는 리소스이며 커널리소스입니다.
따라서 무제한적으로 생성할수는 당연히 없으며(메모리의 제한이 있으므로)
그렇게 많은 커널 리소스를 한 프로세스에서 생성하면 엄청난 성능저하가 있을것 같습니다.
조심스럽게 제안해드리는 것은 설계를 다시 해보시라는 것이며..
시피유 한개에서 처리 가능한 것은 아무리 멀티스레드로 만들고 동기화를 해도
한번에 한개의 명령밖에 처리 할수 없습니댜.
물론 멀티프로세스라고 해봤자 프로세스가 몇만개 몇십만개라면 충분히 그렇게 만들어도
효과가 있을지도 모르겠습니다만...
가능하면 뮤텍스를 최소한으로 (많아야 100개.. 사실 이것도 꽤나 많은 겁니다.) 생성할수 있는
구조로 재설계를 하시기 바랍니다.
-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.
-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.
위의 경우를 피할 수
위의 경우를 피할 수 없다면, posix mutex를 사용하기보다는
atomic operation으로 직접 구현해서 사용하시는 것이 좋을 듯 합니다.
기껏해야 4바이트 정도 사용하니, 메모리 문제도 없고, 그 갯수도
어느정도 가능할 것 같습니다.
주의해야 할 점은 사용자가 직접 구현할 경우
polling을 하는 구조이기 때문에 시간차를 두고, sleep하는 코드를
받으시 넣으셔야 할 것입니다.
그리고, 1 CPU 환경이라면 mutex가 필요없을 수도 있으니, 잘 생각하십시요.
1 CPU 환경이면, 단지 변수 몇개로 동시성 제어를 할 수 있으니,
이렇게 생각하셔도 되고, 위의 설명은 2개 이상의 CPU일 경우였습니다.
잘 되시길 빕니다.
고도의 추상화, 극도의 구체화, 에디슨을 그리워하다.
고도의 추상화, 극도의 구체화, 에디슨을 그리워하다.
댓글 달기