멀티 스레드

프로그래밍 2014. 12. 13. 10:38

멀티 스레드 프로그래밍


1. 프로그램 vs 프로세스

   프로그램 : 하드 디스크에 저장되어있는 실행 코드

   프로세스 : 수행 중인 프로그램의 인스턴스


   Ctrl + F7 = Compile -> .o, .obj

   Ctrl + F5 = Compile + Linking -> .exe


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#if 0
 
#include <iostream>
 
using namespace std;
 
int main()
 
{
 
    cout << "Hello MultiThread..." << endl;
 
}
 
#endif 


 2. 프로세스 구성 요소

   1. 커널 오브젝트, PCB(Process Control Block) - 구조체

       - 구조체 타입 :   리눅스 = task_struct , 윈도우 = EPROCESS


    2. 코드와 데이터를 수용하는 주소 공간(메모리)

       : 프로세스는 동립된 자기만의 주소공간을 가지고 있다.


      프로세스는 자력으로 수행될 수 없다. 프로세스가 무엇인가를 수행하기 위해서는

      프로세스의 컨텍스트 내에서 수행되는 스레드가 존재해야 한다.


      OS는 프로세스를 만들때 한개의 스레드를 만들어 준다.

      : 메인 스레드, primary thread, initial thread


    3. 스레드

        : 프로세스 내에서의 제어 흐름(하나의 실행 단위)


    4. 스레드의 구성 요소

   1) 커널 오브젝트, TCB(Thread Control Block) 

           리눅스 : task_struct, 윈도우 : ETHREAD

       2) 자신만의 스텍을 가지고 있다.


    5. 멀티 스레드 모델과 멀티 프로세스 모델

        - 멀티 프로세스 모델 

        장점 : 다른 프로세스에서 잘못된 메모리 접근을 하더라도, 다른 프로세스는 영향을 받지 않음

        단점 : 데이터의 공유가 어렵다. 운영체제에서 제공하는 IPC 메커니즘을 이용해야 한다.


       - 멀티 스레드 모델

          장점 : 같은 프로세스의 컨텍스트 안에서 여러개의 스레드가 동작하는 것이기 때문에 데이터의 공유가 쉽다.

            프로세스에 비해 다루는 정보가 적기 때문에, 컨텍스트 스위칭의 비용이 작다.

          단점 : 다른 스레드에서 잘못된 메모리 접근을 하는 순간, 프로세스가 종료되기 때문에, 안정성 확보가 어렵다.

                 데이터의 공유로 인한 경쟁 상태가 발생하기 쉽고, 동기화 매커니즘이 필요하다.


       병행성(Concurrency)  vs  병렬성(Parallelism)

        - 병행성 : 사전적 의미는 어떤 일들이 동시에 발생하는 것이다.

                       어떤 일들이 동시에 수행되는 것처럼 보이지만, 실제로는 순차적으로 동작하는 것을 의미한다.

                       병행성은 단일 프로세서 시스템에서 프로세스나 스레드가 동작하는 것

        - 병렬성 : 사전적 의미는 어떤 일들이 동시에 진행되는 병행적인 작업이다.

                       작업들이 동일한 방향으로 교차됨 없이 독립적으로 진행되는 것을 의미한다.

                       병렬성은 멀티 프로세서 시스템에서 프로세스나 스레드가 동시에 동작하는 것


'프로그래밍' 카테고리의 다른 글

Lua 프로그래밍  (0) 2015.04.16
안드로이드 가상 머신 지니모션(Genymotion) 설치  (0) 2015.04.09
파이썬 argparse  (0) 2014.11.08
[STL] List  (0) 2014.03.06
[STL] Vector  (0) 2014.03.05