스레드(thread)

2019. 12. 22. 16:50·Development/CSE
반응형

                                                                                                                                                         

                                                                                                                                                                                                                   

                                                                                                                                                         

                                                                                                                                                                                                              

                                                                                                                                                                                                              

  

스레드(thread)는 어떠한 프로그램 내에서, 특히 프로세스 내에서 실행되는 흐름의 단위를 말한다. 일반적으로 한 프로그램은 하나의 스레드를 가지고 있지만, 프로그램 환경에 따라 둘 이상의 스레드를 동시에 실행할 수 있다. 이러한 실행 방식을 멀티스레드(multithread)라고 한다.

멀티프로세스와 멀티스레드는 양쪽 모두 여러 흐름이 동시에 진행된다는 공통점을 가지고 있다. 하지만 멀티프로세스에서 각 프로세스는 독립적으로 실행되며 각각 별개의 메모리를 차지하고 있는 것과 달리 멀티스레드는 프로세스 내의 메모리를 공유해 사용할 수 있다(즉, 변수를 공유한다). 또한 프로세스 간의 전환 속도보다 스레드 간의 전환 속도가 빠르다. (아마도, 프로세스 간 전환은 하나의 프로세스가 점유하고 있던 자원을 반납하고 재할당하는 과정이 포함되어 있기 때문에 프로세스 간 전환은 느리고, 스레드의 경우 자원을 공유하고 있기 때문에 스레드 간 전환은 빠르다는 추론이 가능할 것이다.)

멀티스레드의 다른 장점은 CPU가 여러 개일 경우에 각각의 CPU가 스레드 하나씩을 담당하는 방법으로 속도를 높일 수 있다는 것이다. 이러한 시스템에서는 여러 스레드가 실제 시간상으로 동시에 수행될 수 있기 때문이다.

멀티스레드의 단점에는 각각의 스레드 중 어떤 것이 먼저 실행될지 그 순서를 알 수 없다는 것이 있다.

예를 들어, 두 스레드가 특정 공유 변수 i의 값을 1 증가시키는 명령을 실행할 때, 다음과 같은 방식으로 수행될 수 있다.

  1. 공유되는 변수 i의 값을 레지스터(임시저장소)에 저장
  2. 레지스터의 값을 1 증가시킨다.
  3. 변수 i에 그 값을 저장한다.

이때 두 스레드가 실행될 때 어떤 스레드가 먼저 실행될지는 보장되지 않으며, 만약 다음과 같은 순서로 실행된다면:

 

최종 결과로 i는 2가 증가된다.

하지만 다음과 같이 실행된다면:

 

최종 결과로 i는 1이 증가되고, 이것은 원래 프로그램의 의도(각각의 스레드가 i를 1씩 증가하는 동작)와 다를 수 있다. 또한 이러한 문제는 스레드의 실행 조건에 따라 결과가 다르게 나오므로, 오류가 발생했을 때 원인을 찾기가 힘들다. 이러한 문제를 경쟁 조건이라고 하며, 문제를 막기 위해 세마포어와 같은 방법을 통해 공유 데이터에 접근하는 스레드의 개수를 한개 이하로 유지하는 방법을 사용할 수 있다.

 


Reference

  • https://ko.wikipedia.org/wiki/스레드_(컴퓨팅)
반응형
저작자표시 비영리 변경금지 (새창열림)

'Development > CSE' 카테고리의 다른 글

경쟁 조건  (0) 2019.12.22
레지스터  (0) 2019.12.22
튜링 동치(Turing equivalence)  (0) 2019.12.22
개념 증명(槪念證明, POC, Proof of Concept)  (0) 2019.12.22
Top down Approach  (0) 2017.04.20
'Development/CSE' 카테고리의 다른 글
  • 경쟁 조건
  • 레지스터
  • 튜링 동치(Turing equivalence)
  • 개념 증명(槪念證明, POC, Proof of Concept)
doh.k
doh.k
  • doh.k
    DOHk's DevLog
    doh.k
  • 전체
    오늘
    어제
    • 분류 전체보기
      • DailyLog
      • TIL
      • Project
        • Development
        • Artificial Intelligence
      • Development
        • Database
        • WEB
        • CSE
        • javascript
        • Algorithms
        • Linux
        • Network
        • Python
        • 라즈베리파이
        • Apple
      • Research
        • 논문
        • 금융,블록체인
        • Time-Series
        • 수학
        • 미적분학
        • 화학
      • Artificial Intelligence
        • Machine Learning
        • Deep Learning
        • TensorFlow
        • ReinforcementLearning
      • 기타
  • 블로그 메뉴

    • 홈
    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    ssh
    알고리즘
    Python
    가상화폐
    스프링
    블록체인
    자바스크립트
    딥러닝
    Linux
    라즈베리파이
    데이터
    기계학습
    맥북
    머신러닝
    gradient descent
    파이썬
    네트워크
    JavaScript
    데이터베이스
    Algorithms
    아이패드
    pycharm
    Network
    자료구조
    gradient
    Spring
    경사하강법
    Machine Learning
    Mac
    리눅스
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
doh.k
스레드(thread)
상단으로

티스토리툴바