프로세스와 스레드...

lims의 이미지

프로세스와 스레드가 대충 어떤 차이인지는 알고 있습니다.
과연 어떨때 스레드를 쓰는 것이 좋고 어떨때 프로세스를 쓰는 것이 좋을까요?

제가 알고 있는 것으로는

Quote:
1. 스레드는 한 프로그램에서 같은 실행을 하지만 프로세스는 자식 프로세스에게 exec함수같은 것을 이용해서 또 다른 실행을 할 수 있다는거...

2. 스레드는 포인터의 잘 못된 사용으로 인해 다른 스레드에 악영향을 미칠수 있지만(같은 메모리 공간과 자원을 사용하기 때문에) 프로세스는 그런 일이 없다는거(메모리 공간을 복사해서 사용하기 때문에)...

3. 새로운 프로세스가 생성되어 메모리가 복사되어질때 새로운 스레드를 만드는 거보다 상대적으로 약간의 오버해드가 발생한다는거(물론 정도는 미미하다고 보지만)...

4. 거의 비슷한 작업들을 하는 것들은 스레드로 하는 것이 좋고 그렇지 않다면 프로세스를 사용하는 것이 좋다? (fine-grained parallelism은 스레드 coarser parallelism은 프로세스?)
(말 표현이 좀... ^^ 영어를 번역한거라)

5. 스레드는 데이터공유가 쉽지만(같은 메모리 공유하기 때문에) race condition을 다뤄야 하는 문제가(동기화) 생기고 프로세스들 간의 데이터공유는 좀 어렵지만(IPC 사용) 동시성에 대한 문제가 덜 발생하는...

음 제가 알고 있는 것들이 맞는지는 몰겠지만 아무튼 저런 장단점들로 인해 스레드 사용과 프로세스 사용을 구분해서 사용한다고 알고 있는데 그럼 저기 나온거 말고 다른 이유가 또 뭐가 있을까요? (아무리 생각해도 그리고 또 검색해봐도 저 내용 말고는 못찾겠네요...ㅡ.ㅜ)

pynoos의 이미지

그 정도면 충분하고 실전을 많이 경험해보셔야합니다.
쓰레드로 소켓을 처리하다가 스택이 모자라서 더이상 쓰레드를 못만들지경이 되었다든지,
쓰레드로 만들다가 한 프로세스가 사용할 수 있는 소켓수의 한계에 도달했다든지.
프로세스로 만들다가 IPC에서 dead lock이 걸려 데이타 교환이 복잡하게 구성되었다든지..

대개 시작은 간단한 선호(?)에서 시작하지만, 한계시점에서 보이는 특성들을 잘 이해하려면 경험하는 수 밖에는 없습니다.

dreampia의 이미지

대개 시작은 간단한 선호(?)에서 시작하지만, 한계시점에서 보이는 특성들을 잘 이해하려면 경험하는 수 밖에는 없습니다.

이 말이 정답이네요.

저 같은 경우는 threads, threads 하길래, 역시 processes보다는 threads가 낳겠지 하면서, processes기반으로 운영되던 모든 것들을 threads 기반으로 변경했습니다. 잘 된것도 있지만 변경해 놓고 후회하다가 다시 processes기반으로 돌린것들이 일부 있습니다. ( SIG_ALRM을 통해 일정한 시간에 작업해야 하는 process, SIG_ALRM(threads unsafe signal입니다.)이 제일 문제가 되었습니다.. )

어떨 때 processes, threads 사용을 해야 하는지는 역시 직접 경험해 봐야지 알수 있을 겁니다.

>/dev/null 2>&1

댓글 달기

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