한 프로세스에서 사용가능한 pthread mutex 갯수에 제약이 있는지 궁금합니다.

vudghkzm의 이미지

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 라는 녀석이 어떤 것에 제약을 받게 되는지 궁금합니다.

chadr의 이미지

뮤텍스는 메모리를 차지하는 리소스이며 커널리소스입니다.
따라서 무제한적으로 생성할수는 당연히 없으며(메모리의 제한이 있으므로)
그렇게 많은 커널 리소스를 한 프로세스에서 생성하면 엄청난 성능저하가 있을것 같습니다.
조심스럽게 제안해드리는 것은 설계를 다시 해보시라는 것이며..
시피유 한개에서 처리 가능한 것은 아무리 멀티스레드로 만들고 동기화를 해도
한번에 한개의 명령밖에 처리 할수 없습니댜.
물론 멀티프로세스라고 해봤자 프로세스가 몇만개 몇십만개라면 충분히 그렇게 만들어도
효과가 있을지도 모르겠습니다만...
가능하면 뮤텍스를 최소한으로 (많아야 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일 경우였습니다.

잘 되시길 빕니다.

고도의 추상화, 극도의 구체화, 에디슨을 그리워하다.

고도의 추상화, 극도의 구체화, 에디슨을 그리워하다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.