LinuxThread 와 pthread

하하의 이미지

저는 Unix(Solaris, AIX), linux (2.4.20 redhat) 계열에서

thread를 사용하여 몇몇 서버 프로그램을 작성해 보았습니다.

요즘 thread에 대해 공부를 하고 있는데 실무와 책(또는 자료)

간에 연결이 안되는 부분이 있어 질문을 해봅니다. ㅋ

먼저 아래글을 몇번 읽고 나서

http://bbs.kldp.org/viewtopic.php?t=349

첫번째 궁금한점은 .

Quote:

1-on-1 커널 쓰레드 방식인 glibc내의 LinuxThreads가 가장 널리 쓰입니다.

여기서 glibc 내의 LinuxThread 와

제가 위 머신에서 사용한 pthread 와의 관계는 어떤지요? ...

(pthread_create 등등은 많이 써봤지만 LinuxThread는 한번도

사용해 본적이 없고 구경도 못해봐서요 ^^.. 여기서 LinuxThread는

커널 쓰레드를 말하는거 같습니다. ㅋ)

일단 제생각엔 pthread는 posix thread로 어느 머신이던지

각 운영체제가 제공하는 알맞은(?) thread 모델(커널 스레드, 사용자 스레드,

커널&사용자 조합 스래드)을 알아서(?) 선택 사용하게끔 한다 왜냐 posix

이니깐 이라고 짧게 생각하고 사용했었습니다 . ㅋ

헌데

Quote:

사용자수준 쓰레드의 대표적인 것으로 GNU Pth, FreeBSD libc_r이 있고,
1:1 커널 쓰레드는 리눅스의 glibc/LinuxThreads, 윈도의 고유 쓰레드
등이 있습니다

사용자 수준의 대표적인 것으로 GNU의 pth(pthread)를 예로 들고 있어서

좀 혼란이 갑니다 ㅎ

실상 제가 혼란스러운건 제가 사용해왔던 사용하고 있는 pthread가

도대체 사용자 쓰레드인지, 아님 커널 쓰레드 인지, 사용자 & 커널 쓰레드인지

전혀 모른다는 겁니다. 그냥 통념적(?)으로 사용해왔을 뿐.

해서 이기회에 확실히 알고 넘어가고 싶은 작은 소망이 있습니다.

여러분의 고견 부탁드리겠습니다.

단 거져 먹을려는 심보는 아님니다.

책도 봐가면서 bbs 글들도 몇번 읽어봤습니다.

이 글을 통해 혼란한 머릿속을 정리하고픈 맘에 글을 올려봅니다.

다들 수고하세요 ㅋ

yielding의 이미지

GNU pth하고 pthread하고 다른 물건입니다.

Life rushes on, we are distracted

ftfuture의 이미지

그냥 제가 아는 바로는 리눅스 커널에서는 쓰레드를 지원하지 않고 pthread에서 clone이라는 시스템콜을 이용해서 구현하는 걸로 알고 있습니다.
glibc/linuxthreads = pthread 인것 같습니다.
pthread 자체가 wrapper 이고 리눅스의 pthread와 sun의 pthread가 옵션을 달리해 주면 동작이 완전히 다른걸로 알고 있습니다.
리눅스의 pthread는 커널 모드 쓰레드이고,
GNU pth는 유저 모드 쓰레드라고 알고 있습니다.

그러나 리눅스의 pthread는 posix를 완벽하게 지원하지 않아 새로 nptl 이 나온걸로 알고 있구요..

하하의 이미지

Quote:

그냥 제가 아는 바로는 리눅스 커널에서는 쓰레드를 지원하지 않고 pthread에서 clone이라는 시스템콜을 이용해서 구현하는 걸로 알고 있습니다.

저도 그렇게 알고 있는데요?

지금 사용하고 있는 linux 머신은 쓰레드 여러개를 가지고 있는

프로세스를 ps -ef 해보면 Unix(solaris)와 같이

한개의 프로세스만 뜹니다.

하지만 여전에 사용하던건 clone 을 사용하기에

쓰레드 갯수만 큼 ps -ef 결과가 떴었거던요? ㅋ

“바람에게도 길은 있다. 나는 비로소 나의 길을 가느니. 길은 언제나 어디에나 있다.”

하하의 이미지

음......

그렇다면.. 응용 프로그래머인 저로선...

이게 사용자 스레드다 아님 커널 스레드다

알필요 없이 pthread 가 제공하는 공통

thread api 만 사용하면 될거 같지만...

아.. 그리고

Quote:

spawn한 프로세스나 쓰레드가 동작(?)을 해야 나오더군요

위 테스트는 여러개의 쓰레드가 활성화 되있는 상태에서

ps -ef 한거라

예전 버전하곤 차이가 있지 않을까요?

“바람에게도 길은 있다. 나는 비로소 나의 길을 가느니. 길은 언제나 어디에나 있다.”

leilei의 이미지

하하 wrote:
음......

그렇다면.. 응용 프로그래머인 저로선...

이게 사용자 스레드다 아님 커널 스레드다

알필요 없이 pthread 가 제공하는 공통

thread api 만 사용하면 될거 같지만...

아.. 그리고

Quote:

spawn한 프로세스나 쓰레드가 동작(?)을 해야 나오더군요

위 테스트는 여러개의 쓰레드가 활성화 되있는 상태에서

ps -ef 한거라

예전 버전하곤 차이가 있지 않을까요?

먼가 찾고 쓰고 한다는게 귀찮은 요즘인지라 썼다가
왠지 부정확한 말만 쓴거 같아 지웠는데 그새 보신 보양이네요.. :oops:

아마 2.4가 되고 nptl인지 먼지 그런 것들이 패치되고 하면서
ps 결과도 바뀌었고 스레드의 구현도 많이 달라진 걸로 알고 있습니다.

저도 kldp bbs 에서 많이 배웠기에 한번 검색을 해 보시면
많은 이야기들이 있을것 같네요.. :)

댓글 달기

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