fork와 쓰레드의 차이점은 무엇이죠??

익명 사용자의 이미지

말그대로 둘의 차이점이 무엇인지요?

사실.. 쓰레드는 개념도 잘 서지가 않습니다. ㅠㅠ

간단하게 설명해주시겠습니까??

익명 사용자의 이미지

fork는 프로세스를 만들게 되고 프로세스간의 context switching을 하게
됩니다. 물론 어떤 스케쥴 정책을 채택하느냐에 따라서 다양한 결과가 나
타날 수 있습니다. thread역시 크게 다를 바는 없습니다. 그러나 thread
는 LWP(Light weight process)라고 부르듯이 thread는 가볍습니다. 왜 가
볍냐구요? thread는 fork에서 생성되는 프로세스가 완전히 별개인 것과 비
교해서 메모리를 공유하게 됩니다. 즉, thread는 현재 살아있는 모습을 나
타내기 위한 정보만을 갖게 됩니다. 예를 들면, 레지스터의 값과 같은 것
들이죠. 공부한지 얼마 안 지났지만 다 잊어버려서...

그래서 context switching을 위한 오버헤드가 프로세스를 중심으로 하는
것보다 더 적을 수 밖에 없습니다. 즉 가볍고 빠르다는 얘기이긴 합니다
만 더 정확하고 자세한 얘기는 다른 분들이 해주실거라 믿습니다. ^^;

즐거운 하루 되시길 바랍니다. ^^;

익명 사용자의 이미지

쉽게 말해서....

저도 오래 되어서 틀릴 수도 있지만.....

참고하시기 바랍니다.

프로세스가 만들어지면,
데이타, 코드, 스택, 기타 세그먼트들이 메모리에 적재되죠.

프로세스가 fork가 되면,
부모의 데이타,코드,스택,..의 세그먼트를
그대로 복사를 하게 됩니다.

줄여서 부모의 메모리 맵을 그대로 자식이 통째로 복제를 합니다.

이렇게 부모에서 자식으로 포크되는 과정이 하나 있고,

그런데 쓰레드란 놈은 다르죠.
한 프로세스의 코드만 복제를 하고 나머지 데이타, 스택,...을
공유합니다.

그래서 fork가 쓰레드보다 자원 소모가 더 많고,
프로세스를 fork로 새로 하나 띄우는 것이 쓰레드보다
시간이 오래 걸리죠.

그리고, 정리 하자면, 한 프로세스 안에 한개 이상의 쓰레드가
존재하게 되는 겁니다.

익명 사용자의 이미지

thread는 stack영역도 공유한다고 하셨는데

궁금증이 생기네요.

function call시 arg를 스택에 넣고 jump를 하는데
그렇다면 두 thread(main thread, child thread)간 스택은
어떻게 나눠쓰는지 이해가 안가네요.

이것역시 context switching으로 설명이 되는것인지도 모르겠고...

아시는 분 답변좀 부탁합니다.^^*

익명 사용자의 이미지

자세히 알고 싶다면, 커널 공부 하시기 바랍니다.
그게 아니라면,
포크는 비용이 많이 들고, 무겁다.
쓰레드는 비용이 적게 들고, 가볍다.
라고 이해하시면 됩니다.

참고로, 리눅스에서는 너무 많은 쓰레드생성시
다른 프로세스에 비해 스케쥴링 시간을 많이 잡아 먹는
걸로 알고 있는데, 기억이 잘 안나네요. 헤헤...

댓글 달기

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