쓰레딩 유형 중 커널레벨 쓰레드 모델에서는 경량화의 의미가있&

ddoman의 이미지

쓰레드를 경량화프로세스라고도 부르는거 같은데,

유저레벨 쓰레드는 context switching 비용이 없으니깐
경량화라고 부를만한거 같습니다만,

커널레벨 쓰레드 ( 1:1 )에서는 전혀 context switching 비용을 줄일수없을거
같은데, data segment를 공유한다는 점을 제외하곤 프로세스와 차이 점이있나요?

경량화라는 이름을 붙이는건 뭔가 비용이 싸다는 소리같은데
어떤 점이 그렇다는건지 이해가 안갑니다.

방준영의 이미지

ddoman wrote:
쓰레드를 경량화프로세스라고도 부르는거 같은데,

유저레벨 쓰레드는 context switching 비용이 없으니깐
경량화라고 부를만한거 같습니다만,

커널레벨 쓰레드 ( 1:1 )에서는 전혀 context switching 비용을 줄일수없을거
같은데, data segment를 공유한다는 점을 제외하곤 프로세스와 차이 점이있나요?

경량화라는 이름을 붙이는건 뭔가 비용이 싸다는 소리같은데
어떤 점이 그렇다는건지 이해가 안갑니다.


유저레벨 스레드에도 여전히 컨텍스트 전환 비용은 듭니다. 각 스레드마다 레지스터를 따로 갖고 있어야 하니까요. 대신 커널 모드로 전환할 필요가 없으므로 모드 전환 비용이 들지 않는 것이죠. 반면 커널 스레드(1:1, M:N)는 컨텍스트+모드 전환 비용이 둘다 존재합니다.
ddoman의 이미지

그러면 커널 스레드( 1:1 M:N )는 컨텍스트+모드 전환 비용이 존재한다는것은
일반 프로세스와 비교해서 전혀 '경량'하지않다는 의미입니까?

제가 궁금한건 커널 스레드( 1:1 )을 사용하면 fork된 프로세스에 비해서
'경량화' 의 의미가 있는지 궁금해서입니다.

단지 data segment 공유만 되는 차이인지, 정말로 fork된 프로세스에 비해 경량화 프로세스라 불릴만한 차이가 있는것인지..

fork에 비해 스레드 생성이 별 비용절감 효과(?) 가 없다면
동기화 처리나 재진입 처리를 해야하는 스레드보다 차라리 fork하고 소켓통신이나 다른 프로세스 통신 방법을 이용하는게 더 낫지 않을까 궁금해서요..

아..생각해보니 메모리공간은 절약되겠군요...그런의미에서 경량화인가?

방준영의 이미지

경량 프로세스는 대신 일반 프로세스에 비해 메모리 컨텍스트(물리적 메모리와 가상 메모리간의 매핑, TLB, 캐쉬 등등) 전환 비용이 없기 때문에 그만큼 가볍다고 할 수 있죠. 예를 들어 같은 프로세스 안에 있는 두 개의 경량 프로세스간에는 레지스터 컨텍스트는 전환이 필요하지만 메모리 컨텍스트는 전환할 필요가 없습니다. fork로 생성한 일반 프로세스간에는 전부 다 전환이 필요하구요.

hb_kim의 이미지

ddoman wrote:
fork에 비해 스레드 생성이 별 비용절감 효과(?) 가 없다면
동기화 처리나 재진입 처리를 해야하는 스레드보다 차라리 fork하고 소켓통신이나 다른 프로세스 통신 방법을 이용하는게 더 낫지 않을까 궁금해서요..

동기화 처리와 재진입처리는 둘다 한가지를 의미하는것 아닐까요? 글로벌 데이터의 locking...

그리고 locking은 실제로 충돌이 일어나지 않는 이상은 프로세스나 스레드의 전환이 일어나지 않습니다. 다른 프로세스 통신 방법을 이용하면 반드시 전환이 일어나죠.

댓글 달기

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