Process vs. Thread??

ssk의 이미지

프로세스, 쓰레드 이야기가 많이 나오는데 도대체 둘의 차이점을 무엇이라고
설명해야 할런지요?

시험 문제에도 많이 나오는것 같고 이곳저곳 글을 읽을때도 아주 많이
나오는 이야기인데 막상 차이점을 설명하라고 하면 제대로 설명하기가
어렵네요.

이분야에 대해서 잘 아시는 분들의 친절한 설명 부탁드리겠습니다~~~

감사합니다....

lugi의 이미지

정확한 분류법은 아니지만 일반적으로
프로세스는 CPU가 MMU를 통해서 메모리를 관리, 보호해주는 태스크를 말하며,
스레드는 MMU등이 없는 CPU에서의 테스크이거나 MMU가 있는 cpu일경우 한 프로세스내에서 테스크들로 서로 메모리를 공유하는 테스크를 말합니다. 즉 프로세스끼리는 서로 IPC를 사용해야만 데이터를 공유할 수 있고 한 프로세스의 죽음,오류등이 다른 프로세스의 영향을 미치지 못하지만, 스레드는 서로 메모리를 공유하므로 한 스레드가 죽으면 그 스레드와 같은 프로세스내에 있는 다른 스레드 또한 위협을 받을 수 있습니다.

--------------------------------------------------------------------------------------
조금씩이라도 전진한다.

eyefree의 이미지

멀티태스킹(Multitasking)이란 OS가 한번에 하나 이상의 프로그램을 실행하는

것을 의미합니다. 하지만 프로세서 하나당 하나의 job을 한번에 실행할 수 있기

때문에, 엄밀한 의미의 멀티 태스킹은 여러개의 프로세서로 구성된 시스템에서만

가능하겠죠.

다만 시간분할 방식(time slicing)이라고 해서 하나의 CPU의 시간을 작게 쪼개어서

실행중인 프로그램들에게 나누어주는 방식으로 멀티 태스킹을 구현하고 있습니다.

이렇게 CPU시간을 나눠주는 것을 스케쥴링(scheduling)이라고 하구요. 이 스케쥴

링의 단위가 Windows NT의 경우 스레드가 됩니다. (즉 스레드들이 CPU시간을

할당받게 되는 것이죠.)

프로세스는 실행파일이 로더에 의해 실행되어 메모리에 올라온 상태를 지칭합니다.

어플리케이션에서 사용되는 모든 리소스를 소유하는 오브젝트이구요.

스레드는 프로세스 내의 독립된 실행 경로라고 할 수 있습니다. (즉 하나의 프로세

스는 하나 이상의 스레드를 가진다고 볼 수 있습니다.)

즉 프로세스와 스레드는 포함관계라고 해도 무방하겠네요. ^^;; (개인적인 생각입니다.)

스레드는 프로세스의 가상 주소 공간, 코드와 전역 데이터를 공유하지만 서로(다른

스레드간의) 독립적으로 실행되고 독립적인 스택을 가지게 됩니다.

가장 간단한 경우의 프로세스는 1차 스레드라고 알려진 주 스레드를 가지게 됩니다.

만약 하나의 스레드를 가진 프로세스라면

Quote:

"프로세스 A = 전역 데이터 + 환경 데이터 + 힙 + 스레드 스택 + 스레드 코드 "

와 같이 구성이 되고, 프로세스가 3개의 스레드를 가지고 있다면

Quote:

"프로세스 B = 전역 데이터 + 환경 데이터 + 힙
스레드 1의 스택 + 스레드 1의 코드
스레드 2의 스택 + 스레드 2의 코드
스레드 3의 스택 + 스레드 3의 코드"

와 같은 형태가 됩니다. 즉 스레드들이 전역 데이터와 힙 정보 등을 공유하게 되지요.

만약 3개의 프로세스 간의 통신(IPC 설비를 이용해서)을 구현해보신 분이라면, 전역 데이터를 공유하는

스레드의 장점을 느끼실 수 있을것이라 생각됩니다. (프로그래밍 관점에서 스레드들은

외부변수값을 set/get하는 것으로 데이터의 공유를 할 수 있지만, 멀티 프로세스의

경우 OS가 지원하는 프로세스간 통신매커니즘(함수와 지정된 자료구조의 이용)을 통해서

하게 됩니다.)

그래서 멀티 프로세스 프로그래밍은 프로세스간의 통신을 구현하기가 멀티 스레드

프로그래밍보다 난해하고, 프로세스를 여러개 띄우는 것 자체가 스레드를 여러개

생성하는 것보다 시스템에 부담(전역 데이터 + 환경 데이터 + 힙을 각각 가져야 하므로)

을 많이 주게 됩니다.(단점). 다만 멀티 스레드로 구성할 경우

하나의 프로세스 영역 안에 여러 스레드가 동작을 하고 있기 때문에

각각 독립된 프로세스에서 실행되는 1차 스레드보다 안정성이 떨어지게 됩니다.

(예를 들어 여러개의 스레드가 동일한 resource에 접근하려면 필연적으로 동기화

문제를 해결해야 하는데 치명적인 경우 데드록에 이를수도 있기 때문입니다.)

... Do It Now!!!

댓글 달기

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