본문 바로가기

삼성전자 알고리즘/기타

18. 스레드

출처 : https://jjeongil.tistory.com/153

1. 하나의 프로그램이 마치 동시에 여러 개의 동작을 하는 것과 같은 효과를 표현하기 위해 운영체제에 도입된 개념.

2. OS에서 각각 제공해주던 기능이 C++11 부터 표준으로 채택.

#include <iostream>
#include <thread>
using namespace std;

//스레드에 의해 호출되는 함수
void CallThread(int t_id) {
    cout << "스레드 실행 " << t_id << endl;
}
int main() {
    thread t[10];
    //10개의 스레드 시작
    for (int i = 0; i < 10; ++i) {
        t[i] = thread(CallThread, i);
    }
    cout << "메인 함수 시작" << endl;
    //스레드가 종료될 때 까지 대시
    for (int i = 0; i < 10; ++i) {
        t[i].join();
    }
    
    return 0;
}

3. 실행 할 때 마다 결과값이 달라짐.

 

4. 프로세스와 스레드의 비교 : 

1) 멀티프로세스에서 각 프로세스는 독립적으로 실행되며 각각 별개의 메모리를 차지하고 있는 것과 달리 멀티스레드는 프로세스 내의 메모리를 공유해 사용할 수 있다. 

2) 프로세스 간의 전환 속도보다 스레드 간의 전환 속도가 빠르다.

 

5. 멀티스레드 장점 :

1) CPU가 여러 개일 경우 각각의  CPU가 스레드 하나씩을 담당하는 방법으로 속도를 높일 수 있다.

   (이러한 시스템에서는 여러 스레드가 실제 시간상으로 동시에 수행될 수 있기 때문)

 

6. 멀티스레드 단점 :

1) 각각의 스레드 중 어떤 것이 먼저 실행될지 그 순서를 알 수 없다.

 

7. 경쟁 조건의 발생. 이러한 문제를 막기 위한 세마포어 방법 (공유 데이터에 접근하는 스레드의 개수를 한 개 이하로 유지)

 

8. 스레드의 종류 : 

1) 사용자 레벨 스레드 (User-Level Thread)

   i) 커널 영역의 상위에서 지원.

   ii) 사용자 레벨의 라이브러리를 통해 구현됨.

   iii) 라이브러리는 스레드의 생성 및 스케줄링 등에 관한 관리 기능을 제공.

   iV) 하나의 스레드가 시스템 호출 등으로 중단되면 나머지 모든 스레드 역시 중단되는 단점이 있음.

2) 커널 레벨 스레드 (Kernel-Level Thread)

  i) 운영체제가 지원하는 스레드 기능으로 구현.

  ii) 커널이 스레드의 생성 및 스케줄링 등을 관리.

  iii) 스레드가 시스템 호출 등으로 중단되더라도, 커널은 프로세스 내의 다른 스레드를 중단시키지 않는다.

  iV) 다중처리기 환경에서 커널은 여러 개의 스레드를 각각 다른 처리기에 할당할 수 있다.

  V) 사용자 스레드에 비해 생성 및 관리하는 것이 느리다.

 

9. 스레드 데이터

1) 스레드 기본 데이터 :

   i) 자신만의 고유한 스레드 ID

   ii) 프로그램 카운터

   iii) 레지스터 집합

   iV) 스택

코드, 데이터, 파일 등 기타 자원은 프로세스 내의 다른 스레드와 공유함.

 

2)스레드 특정 데이터 :  위의 기본 데이터 외에도 하나의 스레드에만 연관된 데이터가 필요한 경우가 있는데 이런 데이터를 스레드 특정 데이터 (Thread-Specific Data, 줄여서 TSD)라고 한다.

  i) 특별한 경우 개별 스레드만의 자료 공간이 필요함.

  ii) 예를 들어 여러 개의 트랜잭션을 스레드로 처리할 경우, 각각의 트랜잭션 ID를 기억하고 있어야 하는데, 이때 TSD가 필요함.

   

출처 : 위키피디아 http://bitly.kr/g5ltsB

 

'삼성전자 알고리즘 > 기타' 카테고리의 다른 글

static과 extern 변수  (0) 2019.05.26
동적할당  (0) 2019.05.21
17. Web Programming(JSP & Servlet)  (0) 2019.05.16
16. Web Programming (JavaScript)  (0) 2019.05.16
15. 파이썬  (0) 2019.05.16