리눅스 쓰레드.. 정말 답답하네요..

익명 사용자의 이미지

쓰레드 프로그래밍을 하고 있는데여.. 아래 증상이 이렇네요..

총 3개의 프로그램을 돌려 보고 있는데

하나는 단순하게 pthread_crate 함수를 이용해서 쓰레드를 만들구여(1번)

하나는 pthread.h 에 있는 pthread 함수들로 클래스화 해서 만들구여(2번)
( 예를들어 PThread->Run() 이런식의..)

나머지 하나는 2번과 흡사 한데.. 쓰레드 클래스가 맴버도 많고 메소드도 많아
여..

덩치가 좀 크져...

그런데 각각 프로그램 마다 최대 만 들수 있는 쓰레드의 제한이 다르군요..

1번은 1000 개 까지 만들고 더 이상 만들지 못하구여..

2번은 500 개 정도 만드네여..

3번은 300개 정도 만들고 더 이상 쓰레드를 만들지 못하네여..

문제가 뭘까여 ?? 한 프로그램에서 사용 할수 있는 제한이 있나 싶기두 하구
여..

이상해서리 2번 프로그램을 여러개 돌려 봤더니 (각각 3개의 프로그램이500개
씩)

1500개 정도 만들 구 못 만들더라구여..

ulimit -a 해서 보니까 최대 프로세스는 2048 이구여..

정말 감이 잡히질 않는군여...

답변 부탁 드릴께여.. 감사합니다.

익명 사용자의 이미지

원래의 pthread는 127개로 제한을 두는 것으로 되어있습니다
리눅스에서는 _clone 이라 더 될ㅈ 몰라도\
127개 이상쓰지 마시길...

익명 사용자의 이미지

http//www.ezdoum.com/_data/thread.jpg

그림처럼 쓰레드가 만들어지 지면
쓰레드 별로 스택공간이 할당이 되는데,

이것이 차이가 프로그램 마다 쓰레드를 갯수가
차이가 생기는 것이 아닐지 싶네요..

그런데, 쓰레드를 1000개씩 만들면..
스케쥴링에 문제가 생기지 않나요?
컨텍스트 스위치 오버헤드 때문에 역효과가 생길듯 하네요..

^^;

익명 사용자의 이미지

서버 사이드 프로그램을 하고 있는데 한 유저당 쓰레드 하나를 할당해야 하는
구조 거든요..

그래서 지금 현제 프로그램 구조상으로는 한 유저당 하나의 쓰레드를 붙일수
밖에 없는 상황이구여..

ㅋㅋ

지금 현제 커널이 2.2.X 인데 2.4.X 로 업그래이드 하면 어떨까요 ??

그리고 하나의 프로그램당 스택 사이즈를 어떻게 제어 하죠 ??

원래 지금이 프로그램이 윈2000 adv svr 에서 작업 한건데 리눅으로

포팅 했거덩요.. 근데 윈도2000 쓰레드가 2001 개 까지 생기던데..

음.. 다들 쓰레드를 많이 쓰지 말라구 그러시네요..

어떻게 하면 좋을런지.....

프로그램 구조를 몽땅 바꿀순 없을듯 싶거든요.. 지금으로썬..

익명 사용자의 이미지

Unix Network Programming 2ed, volume1
p613.
each system supports a limited number of
thread-specific data items. Posix.1 requires
this limit be no less then 128(per process),
...

그런데 쓰레드는 100개 이상 생성하면 좋지 않다고
들었는데 )

익명 사용자의 이미지

# 스택 사이즈에 관련된 pthread 함수
/* Add information about the minimum stack size needed for the thread
to be started. This size must never be less than PTHREAD_STACK_SIZE
and must also not exceed the system limits. */
extern int pthread_attr_setstacksize __P ((pthread_attr_t *__attr,
size_t __stacksize));

/* Return the currently used minimal stack size. */
extern int pthread_attr_getstacksize __P ((__const pthread_attr_t *__attr,
size_t *__stacksize));

각 쓰래드별 스택 사이즈 뿐만 아니라 프로세스 전체의 스택 사이즈도 제한이 되고
한 프로세스가 열수 있는 최대의 파일수도 제한 되어 있습니다.

그리고 아래의 문서를 한번 참고해보세요

http//kldp.org/KoreanDoc/Ulimit-KLDP
http//kldp.org/pipermail/tip/2001-September/000288.html

그리고 smp환경이라면 2.4.* 훨씬더 효율이 좋을 껍니다.
프로세스 생성의 제한도 없구요...

아마 스택사이즈문제가 아니면 사용가능한 fd가 바닥이 나서
그럴것 같군요...

좋은 결과 있기를 바랍니다.

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.