[완료]프로세스와 스레드의 관계에 대한 질문.

romz1212의 이미지

프로세스 내에 스레드가 존재한다고 들었습니다.
만약 워드프로그램인 코드A를 프로세스가 수행한다고 했을때
<코드A>
1 ★dfsdfdfdfdf....
2 sdfsdfsdfdsf.....
3 ☆sdfsdfsdfsdf.;.....sdf
4 sdfsdfsdfsdf......
5 sdfsdfsdfsdf.....

위와 같다고 가정하에서
☆★이것이 스레드이고 각각의 스레드는 자신의 위치정보 1, 3 을 기억했다가
스레드가 병행성을 가지면서 동시에 수행되는 것이 맞는건가요?
그렇다면 코드A를 수행하기 위한 자원을 배당받는 작업"만" 하는것이 프로세스 인가요?
그러면 프로세스는 명령을 수행하지 않네요?
명령처리는 스레드가 다 하니까요.

그리고 기계어도 마찬가지로 C언어와같이 죽죽 순서대로 실행해나가다가 함수호출을 받으면 그곳에가서 처리하고 다시 돌아오는 형식이라 프로시저 형식으로만 실행하면 될텐데 왜 동시에 코드를 여러번이나 실행하나요?

초보가 시험공부를 하다가 질문 드립니다.
머릿속에는 들어가는데 이해가 안되는 기현상이 발생하고 있습니다.

읽어주셔서 감사하구요.
좋은 휴일 보내시기 바랍니다.

romz1212의 이미지

죄송합니다.
안돼는줄알고 두번이나 눌렀네요..

romz1212의 이미지

아 그리고 일반적으로 프로세스와 스레드는 어떻게 사용하나요?
정말 제가 말한대로 하나의 프로그램에 스레드가 포함된 프로세스 하나 이렇게 사용하나요?
아니면 다른 방식으로 사용하나요?

chadr의 이미지

윈도우즈를 예를 들자면 프로세스를 실행하면 자동으로 메인스레드를 하나 만들고 이 스레드에서 프로그램이
돌아가게 됩니다.

스레드는 프로세스에 종속되는 개념이며, 프로세스와 스레드의 가장 큰 다른점은

프로세스는 메모리공간을 공유하지 않지만
스레드는 서로간에 메모리공간을 공유한다는 것입니다.

즉.. 프로세스 내에서 돌아가는 많은 스레드 중 하나가 삑살나서 잘못된 메모리 참조를 해서 종료가 된다면
해당 프로세스에서 돌아가는 모든 스레드가 종료 되고 결국은 메인스레드도 종료가 되므로 프로세스 자체가 종료 됩니다.

그렇지만 메인스레드만 가지고 있는 프로세스의 메인스레드에서 삑살이 나도 해당 프로세스 하나만 종료가 되지
운영체제에서 돌아가는 모든 프로세스가 죽지 않습니다.

-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.

-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.

chadr의 이미지

프로세스와 스레드의 관계는 프로세스를 구현하는 os에 따라서 조금씩 다릅니다.

유저가 스레드를 전혀 생성하지 않고 프로세스를 실행했을 때 어떤 운영체제에서는
기본적으로 스레드를 하나 생성하고 이곳에서 처리를 합니다.

어떤 운영체제에서는 스레드에 대한 실제 구현이 프로세스와 동일한 구현도 있습니다.

프로세스와 스레드는 개념상의 용어입니다. 개념상으로 구분이 되어있을 뿐 실제 구현은
스레드라고 해도 운영체제 입장에서는 스레드도 프로세스로 간주하고 실행을 할수도 있습니다.

시피유는 한번에 한개의 명령어밖에 처리하지 못합니다.

그런데 운영체제는 멀티테스킹이라는 기능을 통해서 1초에 수십번 프로세스간에 스위칭을 합니다.

이게 컨텍스트 스위칭이라고 합니다.

그렇기 때문에 많은 프로세스가 동시에 실행되는 것같이 보이며, 역시 스레드 또한 동시에 여러개의 스레드가 돌아가는것 같이 보입니다.

어디까지나 단일 시피유를 가진 컴퓨터에 해당되는 말이며.. 여러개의 시피유를 가진 컴퓨터에서는
정말 동시.. 즉 같은 시각에 다른 명령어가 각각의 시피유에 할당되어서 실행이 됩니다.

이렇게 여러개의 시피유를 가진 컴퓨터에서는 동시에 여러개의 명령어를 실행할 수 있으므로
약간의 성능 향상을 위해서 멀티스레드를 사용합니다.

그렇지 않은 단일 시피유를 가진 컴퓨터에서는 성능 향상보다는 프로그램의 응답성을 높이기 위해서
사용합니다.

게임을 예를들어 데이터가 많아서 로딩하는데 많은 시간이 걸린다고 할 때 한꺼번에 많은 데이터를 다 로드 하는 것 보다는
기본적인 데이터만 로드하고 캐릭터가 이동할 때 조금씩 스레드로 로딩한다면 초반 로딩 속도도 빠르고 응답성이 빨라져 사용하기 편합니다.
-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.

-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.

romz1212의 이미지

프로그램이 실행될때 프로세스가 자원을 할당받고 스레드가 프로그램의 명령을 처리하는 건가요?
그럼 단일 프로세서의 경우는 프로세스와 스레드의 관계를 구지 따지자면
프로세스-사용자계정 스레드-사용자계정에서 실행된 프로그램.
이정도가 되나요?

winchild의 이미지

그렇게 보셔도 무난합니다. 굳이 따지자면 유저의 쓰레드를 돌려주는 코드는 없지요.

- 겨울아찌 -
winchild@kldp.org

- 겨울아찌 -
winchild@gmail.com

댓글 달기

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